作者H45 (!H45)
看板CSSE
標題Re: [問題] 反design pattern的見解
時間Mon Feb 12 00:11:50 2007
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 210.208.46.43
: ※ 編輯: mgtsai 來自: 210.208.46.43 (02/10 06:25)
: 推 tinlans:我有點好奇,你是不是讓 visitor 做太多事情了,並不一定 02/10 16:14
: → tinlans:所有的事情都要給 Accept() 轉呼叫的東西通通做完吧, 02/10 16:15
: → tinlans:反正會選用 visitor 的時候,已經決定破壞被 visit 對象 02/10 16:15
: → tinlans:的封裝性了,你可以把相關的資訊記錄在這兩者之外的地方。 02/10 16:16
: → tinlans:包括需要這些資訊才能完成的動作,也一併抽出 visitor。 02/10 16:17
我想封裝性並不全然消失
在java如果修飾子不寫上public | protected | private的話
就會是packaged
這樣一來,在不同的package中使用這個物件時,無法存取內部資訊
封裝性仍然存在的
舉例:House是原繼承樹,Visitor我把它省略了,Main則是另一個package使用到House的
主程式。
=House=
package myAPI.Test;
public class Unstable_node implements Node {
// Unstable的設定值
int configurationValue;
public void accept(Visitor v) {
v.visit(this);
}
}
=Main=
package home.work;
import myAPI.Test.*;
public class Main {
public static void main(String args[]) {
Node n = new Unstable_node();
// Access Deny, 這邊編譯不會過,資訊的隱藏機制仍然存在
// 封裝性並沒有完全消失
n.configurationValue = 1;
}
}
最後補一下,如tinlans所說的
visitor不應該做太多的事情,如果需要共享資訊的話
應該把它們提煉到另一個物件供house, visitor來存取
: 推 YuYuHo:vistor visit house,我覺得vistor最大的缺點 02/10 16:18
: → YuYuHo:是帶給house太大的負擔 02/10 16:21
: → YuYuHo:打錯字了,是visitor,剛打完麻將回來,win~~ya~~ 02/10 22:52
: → YuYuHo:假如說house的內部節點其實是不穩定的型態,結果會造成 02/10 22:54
: → YuYuHo:visitor的介面也變得很不穩定,很容易就搞得一團亂 02/10 22:55
: → YuYuHo:通常採用visitor時,house本身的結構可能就很複雜了, 02/10 22:57
: → YuYuHo:這時候還要管理節點的分派策略,還要維持節點穩定, 02/10 23:01
: → YuYuHo:這表示house做好後就不能隨便更動,很容易牽一髮動全身. 02/10 23:02
請問不穩定的型態是什麼意義
是指需求改變?還是設計的失誤?
為什麼house做好後就不能更動,這和visitor有什麼直接的關係呢
如果不採用visitor的話,那麼原本要加在繼承樹上面的功能又該怎麼處理?
牽一髮動全身我同意
但是使用visitor pattern之後
動到的「全身」應該會比不用visitor pattern來得少吧?
抱歉,我實在是不懂YuYuHo的這段推文
照他的說法,visitor pattern看似限制住了house擴充或修改的彈性
但是我不這麼認為....
不採用visitor的話,當初用visitor在繼承樹上面加入的功能又該怎麼辦?
還有什麼更好的主意嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.213.121
推 tinlans:其實我要說的破壞封裝性,是指 house 被迫 open 給 02/12 15:26
→ tinlans:visitor 的部分,因為 visitor 本身跟 house 是分離的。 02/12 15:27
→ H45:你說的沒有錯,我所要補充的是「封裝性」在另一個觀點來看,並 02/12 16:34
→ H45:沒有消失。 我想我們所描述內容的應該不會造成衝突 02/12 16:38