第28章 VISTITOR模式
VISTITOR模式:允許在不更改現(xiàn)有類層次結(jié)構(gòu)的情況下向其中增加新方法。
該模式如下:
- VISTITOR模式
- ACYCLIC VISTITOR模式
- DECORATOR模式
- EXTENSION OBJECT模式
VISTITOR模式
雙重分發(fā)(Dual Dispatch)是VISTITOR模式的核心機(jī)制。
ACYCLIC VISTITOR模式
如果被訪問層次結(jié)構(gòu)非常不穩(wěn)定,經(jīng)常需要?jiǎng)?chuàng)建許多新的派生類,那么每當(dāng)向被訪問層次結(jié)構(gòu)中增加一個(gè)新的派生類時(shí),就必須要更改且重新編譯基類以及他的所有派生類。
可以用ACYCLIC VISTITOR模式來解決這個(gè)問題。
ACYCLIC VISTITOR模式不適用于嚴(yán)格的實(shí)時(shí)系統(tǒng),對(duì)于那些被訪問的層次結(jié)構(gòu)不穩(wěn)定,且增量編譯比較重要的系統(tǒng)來說,是不錯(cuò)的選擇。
DECORATOR模式
VISITOR模式:使用這種方法可以在不改變現(xiàn)有類層次結(jié)構(gòu)的情況向下其中增加新方法。而 DECORATOR模式也可以達(dá)到這個(gè)目標(biāo)。
EXTENSION OBJECT模式
EXTENSION OBJECT模式也是另一種可以在不改變類層次結(jié)構(gòu)的情況下向其中增加功能的方法。層次結(jié)構(gòu)中的每個(gè)對(duì)象都持有一個(gè)特定擴(kuò)展對(duì)象(extension object)的列表。每個(gè)對(duì)象也提供一個(gè)通過名字查詢擴(kuò)展對(duì)象的方法。擴(kuò)展對(duì)象提供了操作原始層次結(jié)構(gòu)對(duì)象的方法。
可以使用VISITOR模式結(jié)局的問題,往往也可以使用更簡(jiǎn)單的方法解決。
第28章 STATE模式
狀態(tài)圖的4個(gè)元素:起始狀態(tài)、觸發(fā)遷移的事件、終止?fàn)顟B(tài)以及要執(zhí)行的動(dòng)態(tài)。
實(shí)現(xiàn)技術(shù)
- 嵌套swith/case語(yǔ)句
- 解釋遷移表
STATE模式
STATE模式:即具有嵌套swith/case語(yǔ)句的效率又具有解釋遷移表的靈活性。
STATE模式中,派生類特有回指向上下文類的引用。派生類的主要功能時(shí)使用這個(gè)引用選擇并調(diào)用上下文類中的方法。
STRATEGY模式的派生類不必持有指向上下文類的引用。并且也不需要去調(diào)用上下文類的方法。
所有STATE模式實(shí)例同樣也是STRATEGY模式實(shí)例,但并不是所有STRATEGY模式實(shí)例都是STATE模式實(shí)例。
STATE模式:徹底分離了狀態(tài)機(jī)的邏輯和動(dòng)作。