狀態(tài)變化模式
典型模式
- State
- Memento
1 state
目的是應(yīng)對對象狀態(tài)變化,行為也要隨之變化嗜价,保持對象操作和狀態(tài)轉(zhuǎn)化之間的松耦合
State模式將所有與一個特定狀態(tài)相關(guān)的行為都放入一個State的子類對象中,在對象狀態(tài)切換時,切換相應(yīng)的對象;但同時維持State的接口,這樣實現(xiàn)了具體操作與狀態(tài)轉(zhuǎn)換之間的解耦艇抠。
2 Memento
Memento捕獲對象的狀態(tài),在不破壞封裝性的前提下久锥,可以用于以后對象狀態(tài)的恢復(fù)家淤。關(guān)鍵是把狀態(tài)封裝成一個新對象,并與目標(biāo)對象的接口相匹配瑟由。
"數(shù)據(jù)結(jié)構(gòu)"模式
典型模式
- Composite
- Iterator
- Chain of Resposiblility
1 Composite
定義:將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)絮重。Composite使得用戶對單個對象和組合對象的使用具有一致性(穩(wěn)定)。
Leaf 和 Composite 有共同的基類歹苦,leaf是一種具體的實現(xiàn)青伤,而Composite可以看出是同一類型的特殊容器。在Linux的文件系統(tǒng)中殴瘦,普通文件是leaf狠角,而目錄文件是Composite,目錄文件上記錄的有當(dāng)下目錄的文件蚪腋,也有下一層次的目錄文件丰歌,組成了樹狀的文件結(jié)構(gòu)。
2 Iterator
提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露(穩(wěn)定)該對象的內(nèi)部表示屉凯。
這是一種間接訪問而不破壞封裝性的方式立帖,與C++ STL的迭代器不同的是Iterator 使用的是面向?qū)ο蟮木幊趟枷耄鳶TL的迭代器是通過完整的范式編程體系悠砚,六大部件相互工作實現(xiàn)的厘惦,是C++ 精妙的地方,Iterator則顯得有些過時了哩簿。
3 Chain of Resposibility
使多個對象都有機(jī)會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系宵蕉。將這些對象連成一條鏈,并沿著這條鏈傳遞請求,直到有一個對象處理它為止。
第十三周的作業(yè)中使用了責(zé)任鏈的方案节榜,把所有圖形的handler 串在一個鏈上羡玛,若要畫出不同圖形的組合,構(gòu)建好各自圖形的請求宗苍,交于責(zé)任鏈處理稼稿,必然有一個節(jié)點(diǎn)可以實現(xiàn)所要求的圖形,輸入多個請求讳窟,即可以畫出多種圖形的組合让歼。這樣圖形和相應(yīng)的handler都是可以擴(kuò)展的,保持請求發(fā)出者和操作實行的松耦合丽啡。