Creational patterns(創(chuàng)造)
Creational patterns關(guān)注的是如何根據(jù)具體需要創(chuàng)造對象.(是否需要封裝,是否client可見)
????Factory Method pattern——工廠模式
當(dāng)client不知道要創(chuàng)建哪個具體類的實例,或者不想在client代碼中指明要具體創(chuàng)建的實例時,用工廠方法。
定義一個用于創(chuàng)建對象的接口,讓其子類來決定實例化哪一個類,從而使一個類的實例化延遲到其子類。
? ??是一個Object
? ??構(gòu)建過程對client可見
說人話:給你一件衣服(對象接口),但衣服的顏色未知,子類再告訴你.(實例化)
創(chuàng)建一個接口包含工廠方法的聲明,在子類實現(xiàn)該方法時由子類決定返回哪個具體實例

Open-Closed Principle (OCP) ——對擴展的開放,對修改已有代碼的封閉
? ??Abstract Factory(Kit)——抽象工廠模式
抽象工廠模式:??供接口以創(chuàng)建一組相關(guān)/相互依賴的對象, 但不需要指明其具體類。?
? ??是多個Object
? ??構(gòu)建過程對client可見
說人話:給你一個穿搭建議衣服配褲子(一組相關(guān)對象接口),但是衣服褲子的顏色未知,子類時再告訴你.(實例化)
和Factory的差別:限制衣服只能搭褲子,而不能搭裙子.(接口組合固定)
設(shè)計一個抽象類包含多個工廠方法,子類實現(xiàn)時必須同時實現(xiàn)多個工廠方法,以實現(xiàn)“組合”的效果
? ??Builder——構(gòu)造器模式
創(chuàng)建復(fù)雜對象,包含多個組成部分. ??
? ??是一個Object
? ? 細(xì)節(jié)對client隱藏(object的內(nèi)部隱藏,對object的創(chuàng)建過程無法隱藏)
說人話:給你一套固定好的穿搭(一組相關(guān)對象實例),并且衣服褲子顏色款式都搭好了.
和Abstract Factory的差別:給出的穿搭直接就能用(Object內(nèi)部也已實例化)
創(chuàng)建的是一個完整的產(chǎn)品,有多個部分組成,client不需了解每個部分是怎么創(chuàng)建、各個部分怎么組合,最終得到一個產(chǎn)品的完整 object
Structural patterns(結(jié)構(gòu))
Structural patterns關(guān)注的是代碼段之間的連接關(guān)系.即具體實例之間的關(guān)系.?
? ? Bridge——橋接模式
在A中通過動態(tài)傳入(需要連接的對象B),建立關(guān)系,并在A中創(chuàng)建一個屬性把B保存下來.至此完成該模式的delegation linking.
run time delegation linking
說人話:借你一輛車(傳入車鑰匙),你打了一把車鑰匙(保存車鑰匙),從此你就可以一直用這輛車(delegation link)
一個類A的對象中有其他類B的對象作為其組成部分,但A的對 象具體綁定到B的哪個具體子類的實現(xiàn)?在運行時通過delegation加以組合, 并永久保存這種delegation關(guān)系。
? ? Proxy——代理模式
說人話:讓你走到一個地方,你買了輛單車(Proxy代理),以后每次去都通過單車去,更快更輕松.(降低代價和難度)
? ??Composite——組合模式(不考)
說人話:
Behavioral patterns(行為)
? ??Observer——觀察模式

Java有自帶的Observable(偶像)抽象類和Observe(粉絲)抽象類
說人話:微博關(guān)注實例.粉絲將自己委托給偶像,偶像保存粉絲并調(diào)用粉絲的方法.粉絲自己無法主動使用自己的方法.
粉絲被創(chuàng)建后只被偶像保存,因此只能通過偶像調(diào)用.
? ? Visitor
說人話:購物車實例.物品將自己委托給購物車,購物車保存物品并對物品進行操作.在購物車中對不同物體有特殊操作,體現(xiàn)各個物體的差異性,但是不需要更改物品ADT,保持了可維護性.
與Observe的差別: Observe是只有粉絲一種(物品),故沒有對某個物品的特殊操作.其余的委托思想是一樣的.
? ? Mediator(不考)
說人話: 群聊系統(tǒng)實例. Mediator類作為中轉(zhuǎn)服務(wù)器,負(fù)責(zé)管理群聊人員和發(fā)送群聊信息.每個人員只需要將自己添加進Mediator類中或是向Mediator類發(fā)送信息以及收到Mediator類作出反應(yīng).
與Visitor的差別: Visitor中的物品沒有自己的主動行為,靠購物車調(diào)用,因此是把自己整個類委托給了Visitor類. 而Mediator系統(tǒng)中的人可以主動發(fā)送消息和加入群聊,只是將這些功能委托給了Mediator類.
和Observe的差別: Observe中的偶像也是管理者,是高于粉絲的. ?Mediator中的管理者并不是具體的人,只是一個服務(wù)器,每個人都是平等的.
? ? Command(不考)
說人話:Terminal實例. 通過封裝將復(fù)雜操作對外表現(xiàn)為傻瓜指令.
State-based construction(基于狀態(tài))
? ? state
說人話:使用有限狀態(tài)機來定義程序的行為、使用狀態(tài)來控制程序的執(zhí)行.
將程序看作是一個有限狀態(tài)自動機,側(cè)重于對“狀態(tài)”及“狀態(tài)轉(zhuǎn)換” 的抽象和編程.
? ? memento
說人話:記住對象的歷史狀態(tài),以便于“回滾”
Originator--需要“備忘”的類
Caretaker--添加originator的備忘記錄和恢復(fù)
Memento--備忘錄,記錄originator對象的歷史狀態(tài)