OOAD 板


LINE

※ 引述《guestid (访客ID)》之铭言: : 最近在看Head First Design Pattern这本书的Observer Pattern (新手不是很懂) : 书中有提到Java中内建的Observable及Observer可用来实作Observer Pattern : Subject class A 要继承(extends) Observable class : Observer class B 要实作 Observer 这个interface : 问题一: : 本版的范例中没有下面注解的那两行, 书上却多了这两行, 目的何在? 目的是在 Observer 物件中存放一个 Observable 物件 使後续 Observer 物件被 notify 的时候,有能力呼叫 Observable 物件的方法。 : public class B implements Observer { : Observable obs; // 为什麽要有这行???? : public B(Observable obs) { : this.obs = obs; // 还有这行???? : obs.addObserver(this); : } : } : 自问自答: : 不要这两行也可以 : 为了让class B 可以自己unregister , 不再observe 就需要这两行 确实 存放一个 Observable 物件在 Observer 物件中 Observer 可以视情况 unregister 自己。 此答案也是我上面回答的一个实例。 : 问题二: : 听说interface 如 KeyListener、ActionListener,...等也是Observer Pattern : 似乎实务上在实作这类interface时, 好像都没有人去实作建构子(像问题一这样), 视需求而定 通常 actionPerformed 函式所需要的资讯 由 ActionEvent 物件提供就足够了 但有些情况,ActionEvent 提供的资讯不足 像是上一次执行的时间点 需要自己记录在 myActionListener 的 field 中 类此这种 myActionListener 有 field 的情况 大多要实作建构子来初始化这些 field 的初始值 : 而是类似下面这样做: : public class myActionListener implements ActionListener : { : public void actionPerformed(ActionEvent e) { : } : } : 自问自答: : 因为要保持弹性, 让Subject在需要时再以addActionListener(ActionListener a)去 : 注册即可(是吗= = 这个回答自己都觉得有点勉强) 我第一感的回答是,他没写建构子,不代表你不可以写 你可以依照自己的需求来调整物件的设计 如果加一个建构子在 Observer 合乎物件的守则 那就大方地加上去 : 问题三: : 我如果要在问题二中的myActionListener加个建构子(像问题一这样), 要怎麽加呢? : 就用Observable当引数的型别? 还是用ActionEvent? 还是用Button >"< : 到底谁是Subject阿? Subject 就是 Observable 物件。 一样的问题一样的答案:依您的需求而定 先问问您自己:为什麽要加建构子呢 :) : 因为我对这个不是很懂, 不知道这样表达各位是不是看的懂我要表达的意思 OK. --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.22
1F:推 guestid :我懂了!Pattern是活的~没有说一定要照教科书 01/02 22:41
2F:→ guestid :上的类别图依样画葫芦~ 01/02 22:41
3F:→ guestid :例如Listener这个Observer, 通常没有主动权决定要 01/02 22:44
4F:→ guestid :依附在哪个Suject (主动权在Suject), 所以通常就不必 01/02 22:46
5F:→ guestid :有那个建构子去取得Suject 01/02 22:47
6F:→ guestid :教科书只是经典的例子, 不适用在所有情况 01/02 22:48
7F:→ H45 :大致上正如你说所的那样 :) 01/03 00:45
8F:→ adrianshum :我觉得应该想成:要理解书上面的"葫芦" 的重点是什麽 01/04 00:16
9F:→ adrianshum :比如Observer Pattern 的重点不在於有ctor 与否,那 01/04 00:16
10F:→ adrianshum :麽当然不需依据书上例子去决定有什麽样的 ctor 01/04 00:17
11F:→ adrianshum :不过书上说到的重点还是要依,不然很容易就犯了前人 01/04 00:19
12F:→ adrianshum :犯过的问题。比如 Singleton 的 private ctor 就是要 01/04 00:19
13F:→ adrianshum :依样画的其中一个葫芦。 01/04 00:20







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP