GOF23種設計模式概括
阿新 • • 發佈:2019-01-10
GOF23種設計模式分為三種:
建立型模式[工廠方法模式]
結構型模式[(類)介面卡模式]
行為型模式[ 直譯器模式,模板方法模式] 建立型模式Creational Patterns
抽象工廠模式abstract factory:提供了一個建立一系列相關或互相依賴物件的介面,而無須指定他們具體的類;
建造者模式builder:將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示;
工廠方法模式factory method:將類的例項化操作延遲到子類中完成,即由子類來決定究竟應該例項化(建立)哪一個類;
原型模式prototype:通過給出一個原型物件來指明所要建立的物件的型別,然後通過複製這個原型物件的辦法創建出更多同類型的物件;
單例模式singleton:確保在系統中某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項;
結構型模式Structural Patterns
介面卡模式adapter:將一個介面轉換成客戶希望的另一個介面,從而使介面不相容的那些類可以一起工作;
橋接模式bridge:將抽象部分與它的實現部分分離,使它們都可以獨立地變化;
組合模式composite通過組合多個物件形成樹形結構以表示“整體-部分”的結構層次,對單個物件(即葉子物件)和組合物件(即容器物件)的使用具有一致性;
裝飾模式decorator動態地給一個物件增加一些額外的職責;
外觀模式facade:為複雜子系統提供一個一致的介面;
享元模式flyweight通過運用共享技術有效地支援大量細粒度物件的複用;
代理模式proxy:給某一個物件提供一個代理,並由代理物件控制對原物件的引用;
行為者模式Behavioral Patterns
職責鏈模式chain of responsibility:避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止;
命令模式command:將一個請求封裝為一個物件,從而使得請求呼叫者和請求接收者解耦;
直譯器模式interpreter:描述如何為語言定義一個文法,如何在該語言中表示一個句子,以及如何解釋這些句子;
迭代器模式iterator:提供了一種方法來訪問聚合物件,而不用暴露這個物件的內部表示;
中介者模式mediator:通過一箇中介物件來封裝一系列的物件互動,使得各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動;
備忘錄模式memento:在不破壞封裝的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態;
觀察者模式observer:定義了物件間的一種一對多依賴關係,使得每當一個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新;狀態模式state:
允許一個物件在其內部狀態改變時改變它的行為;
策略模式strategy:定義一系列演算法,並將每一個演算法封裝在一個類中,並讓它們可以相互替換,策略模式讓演算法獨立於使用它的客戶而變化;
模板方法模式template method:定義一個操作中演算法的骨架,而將一些步驟延遲到子類中;
訪問者模式visitor:表示一個作用於某物件結構中的各元素的操作,它使得使用者可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
結構型模式[(類)介面卡模式]
行為型模式[ 直譯器模式,模板方法模式] 建立型模式Creational Patterns
抽象工廠模式abstract factory:提供了一個建立一系列相關或互相依賴物件的介面,而無須指定他們具體的類;
建造者模式builder:將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示;
工廠方法模式factory method:將類的例項化操作延遲到子類中完成,即由子類來決定究竟應該例項化(建立)哪一個類;
原型模式prototype:通過給出一個原型物件來指明所要建立的物件的型別,然後通過複製這個原型物件的辦法創建出更多同類型的物件;
單例模式singleton:確保在系統中某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項;
結構型模式Structural Patterns
介面卡模式adapter:將一個介面轉換成客戶希望的另一個介面,從而使介面不相容的那些類可以一起工作;
橋接模式bridge:將抽象部分與它的實現部分分離,使它們都可以獨立地變化;
組合模式composite通過組合多個物件形成樹形結構以表示“整體-部分”的結構層次,對單個物件(即葉子物件)和組合物件(即容器物件)的使用具有一致性;
裝飾模式decorator動態地給一個物件增加一些額外的職責;
外觀模式facade:為複雜子系統提供一個一致的介面;
享元模式flyweight通過運用共享技術有效地支援大量細粒度物件的複用;
代理模式proxy:給某一個物件提供一個代理,並由代理物件控制對原物件的引用;
行為者模式Behavioral Patterns
職責鏈模式chain of responsibility:避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接收請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止;
命令模式command:將一個請求封裝為一個物件,從而使得請求呼叫者和請求接收者解耦;
直譯器模式interpreter:描述如何為語言定義一個文法,如何在該語言中表示一個句子,以及如何解釋這些句子;
迭代器模式iterator:提供了一種方法來訪問聚合物件,而不用暴露這個物件的內部表示;
中介者模式mediator:通過一箇中介物件來封裝一系列的物件互動,使得各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動;
備忘錄模式memento:在不破壞封裝的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態;
觀察者模式observer:定義了物件間的一種一對多依賴關係,使得每當一個物件狀態發生改變時,其相關依賴物件皆得到通知並被自動更新;狀態模式state:
允許一個物件在其內部狀態改變時改變它的行為;
策略模式strategy:定義一系列演算法,並將每一個演算法封裝在一個類中,並讓它們可以相互替換,策略模式讓演算法獨立於使用它的客戶而變化;
模板方法模式template method:定義一個操作中演算法的骨架,而將一些步驟延遲到子類中;
訪問者模式visitor:表示一個作用於某物件結構中的各元素的操作,它使得使用者可以在不改變各元素的類的前提下定義作用於這些元素的新操作。