一蒲牧、對(duì)象性能模式
1.Singleton
1).? 保證一個(gè)類(lèi)只有一個(gè)實(shí)例, 并提供一個(gè)該實(shí)例的全局訪問(wèn)點(diǎn)蜓陌。
2).? 多線(xiàn)程環(huán)境注意對(duì)雙檢查鎖的實(shí)現(xiàn)
2.Flyweight
1) 使用共享技術(shù)有效支持大量細(xì)粒度的對(duì)象
2) 大多數(shù)狀態(tài)顆變?yōu)橥獠繝顟B(tài)
二徐许、狀態(tài)變化模式
1.State
1)與特定狀態(tài)相關(guān)的行為都放入一個(gè)State的子類(lèi)對(duì)象中, 在找對(duì)象狀態(tài)切換時(shí)可柿, 切換相應(yīng)的對(duì)象鸠踪; 同時(shí)維護(hù)State的接口, 這樣實(shí)現(xiàn)了具體操作與狀態(tài)轉(zhuǎn)換之間的解耦复斥。
2)如果State沒(méi)有實(shí)例對(duì)象营密, 可以共享同一個(gè)State對(duì)象 節(jié)省開(kāi)銷(xiāo)
2.Memento
1)備忘錄存儲(chǔ)原發(fā)器對(duì)象內(nèi)部狀態(tài),在需要時(shí)回復(fù)原發(fā)器的狀態(tài)
2)核心是信息隱藏目锭, 原發(fā)器隱藏信息评汰, 又需要將狀態(tài)保持到外界
3)C#, java的序列號(hào)比較容易痢虹,效率較高的實(shí)現(xiàn)Memento模式
三被去、數(shù)據(jù)結(jié)構(gòu)模式
1.Composite
1)將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分-整體”, 將一對(duì)多關(guān)系轉(zhuǎn)化為一對(duì)一關(guān)系奖唯, 客戶(hù)代碼無(wú)需關(guān)心處理的是單個(gè)對(duì)象還是組合對(duì)象
2)客戶(hù)代碼和復(fù)雜對(duì)象容器結(jié)構(gòu)解耦是核心思想
3)使用通過(guò)多態(tài)遞歸調(diào)用惨缆,解耦內(nèi)部和外部依賴(lài)關(guān)系
2. Iterator
1)訪問(wèn)一個(gè)聚合對(duì)象內(nèi)容無(wú)需暴露他的內(nèi)部結(jié)構(gòu)
2)迭代多態(tài): 為遍歷不同的集合結(jié)構(gòu)提供統(tǒng)一的接口;
3) 迭代器的健壯性考慮:遍歷的同時(shí)更改迭代器所在的集合結(jié)構(gòu)丰捷, 會(huì)導(dǎo)致問(wèn)題
3. Chain of Responsibility
1) 一個(gè)請(qǐng)求可能有多個(gè)接受者坯墨, 但最后真正的接受者只有一個(gè)。將發(fā)送和接受者解耦病往;
2) 靈活的對(duì)象職責(zé)派發(fā)捣染, 運(yùn)行時(shí)添加處理職責(zé)。
四停巷、行為變化模式
?1.Command
1) 將行為請(qǐng)求者和行為實(shí)現(xiàn)者解耦耍攘;
2)Command 與C++的函數(shù)對(duì)象有些類(lèi)似榕栏, 但是兩者定義行為接口的規(guī)范有所區(qū)別:command 以面向?qū)ο蟮摹敖涌?實(shí)現(xiàn)”定義行為接口, 更加嚴(yán)格蕾各, 性能有損失扒磁, C++函數(shù)對(duì)象以函數(shù)簽名來(lái)定義行為接口規(guī)范, 更靈活式曲, 性能更高渗磅。?
?2. Vistor
1) 通過(guò)雙重分發(fā)(兩次虛函數(shù)辨析), double dispatch检访, 在element類(lèi)層次結(jié)構(gòu)的前提下始鱼, 在運(yùn)行時(shí)透明的為類(lèi)層次結(jié)構(gòu)的各個(gè)類(lèi)動(dòng)態(tài)添加新操作;
2)vistor使用Elements類(lèi)層次穩(wěn)定脆贵, 但是器操作頻繁的變化
五医清、領(lǐng)域規(guī)則模式
1.Interpreter?
1), 業(yè)務(wù)規(guī)則頻繁變化卖氨, 且類(lèi)似結(jié)構(gòu)不斷重復(fù)会烙, 容易抽象為語(yǔ)法規(guī)則的問(wèn)題 。
2)? 只適合簡(jiǎn)單的文法表示筒捺, 對(duì)于復(fù)雜的文法將產(chǎn)生較大的類(lèi)層次柏腻, 需要求助于語(yǔ)法的分析生成器。?