1. 程式人生 > >各用一句話描述23種設計模式

各用一句話描述23種設計模式

Abstract Factory(抽象工廠):提供一個建立一系列相關或相互依賴物件的介面,而無需指定他們的具體的類。

Adapter(介面卡):將一個類的介面轉換成呼叫者希望的另外一個介面。介面卡模式是的原本由於介面不相容而不能在一起工作的那些類可以一起工作。

Bridge(橋接):將抽象部分與他的實現部分分離,使他們都可以獨立的變化。比如在實體類裡面使用聚合,該聚合的屬性為抽象的,可以動態改變其真正的實現類,聯想spring ioc 的注入。

Builder(建造者):將一個負責物件的構建與他的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式比工廠模式多了一個指揮者的角色,比如某商品是需要由不同工廠加工而成的零件拼裝而成,在指揮者角色中指揮由不同工廠建立的零件的拼裝過程。

Chain of Responsibility(責任鏈):為解除請求的傳送者和接受者之間耦合,而使多個物件都有機會處理這個請求。將這些物件連成一條鏈,並沿著該鏈傳遞請求,直到有一個物件處理他。是消除多個if-else的好方法。

Commond(命令):將一個請求封裝成一個物件,該物件裡面封裝了真正動手的服務類,從而使你可用不同的請求對具體服務進行引數化;對請求排隊或記錄請求日誌,以及支援可消除的操作。

Composite(元件):將物件組合成性結構以表示“部分-整體”的層次結構。Composite使得客戶對單個物件和複合物件的使用具有一致性。重點在於形成一個樹形結構。

Decorator(裝飾者)

:動態給一個物件新增一些額外的職責。就拓展功能而言,Decorator模式比生成子類方式更加靈活。可以聯想到以前做swing的時候很多時候用到了裝飾者模式動態增加功能。

Facade(外觀):為子系統中的一組介面提供一個一致的對外操作方法。Facade模式定義了一個高層介面。這個介面使得這一子系統更加容易使用。可以聯想到當我們拿到一些開源專案的時候,我們使用了一個類對一系列的操作進行封裝,這其實就是外觀模式。

Factory Method(工廠):定義一個用於建立物件的介面,讓子類決定將哪一個類例項化。Factory Method 使一個類的例項化延遲到其子類。聯想到將原料放入類返回產品(物件)。

Flyweight(蠅量):運用共享技術有效的支援大量細粒度的物件。比如可以使用一個List對一些相同的物件進行封裝,然後通過定義好的一系列介面對所有物件進行操作。

Interpreter(直譯器):給定一個語言,定義他的文法的一種表示,並定義一個直譯器,該接直譯器使用該表示來解釋語言中的句子。比較少用到,可以聯想到一些語言的解析。

Iterator(迭代器):提供一種方法順序訪問一個聚合物件中各個元素,而又不需暴露該兌現的內部表示。聯想到List的迭代器,就是封裝了內部的資料結構,其實內部的結構是一個一維陣列,Object[]。

Mediator(中介者):提供一箇中介物件來封裝一系列的物件互動。中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立的改變他們之間的互動。把*型互動轉換為以中介者為核心的中心者互動。

Memento(備忘錄):在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件回覆到儲存的狀態。一般使用資料庫做持久化處理,還未聯想到該模式使用用途。

Observer(觀察者):定義物件間的一種一對多的依賴關係,以便當一個物件的狀態發生改變時,所有依賴他的物件都得到通知並自動更新。原理是在被觀察者中增加List**儲存觀察者**,每次被觀察者又什麼動靜時,呼叫方法,統一呼叫List裡面的觀察者的被通知方法。jdk有提供相應api

Prototype(原型):用原型例項指定建立物件的種類,並且通過拷貝這個原型來建立新的物件。java使用.clone()方法進行物件的克隆。使用該方法時,是通過直接複製二進位制資料來建立一個複製的物件,效果比用new 反射快的多。

Proxy(代理模式):為其他物件提供一個代理以控制對這個物件的訪問。代理與真正的實體實現同一介面,代理依賴實體類。當用戶呼叫代理類的方法時,可以在上面做一些處理,在呼叫真正的實體。java提供動態代理api,以前使用動態代理做日誌記錄,遮蔽,防護等。但是後來spring aop 功能出現,代替了動態代理功能。

Singleton(單例):保證一個類僅有一個例項,並提供一個訪問他的全域性訪問點。全域性只有一個物件,有懶載入模式,餓載入模式,還有使用靜態內部類載入模式。

State(狀態):允許一個物件在其內部狀態改變時改變他的行為。物件看起來似乎修改了它的所屬的類。實體物件依賴狀態,把所有操作都分別封裝在具體的狀態中,讓狀態物件幫我幹活。

Strategy(策略):定義一系列演算法,把他們一個個封裝起來,並且使他們可互相替換。本模式使演算法可變化可獨立於使用他的使用者。同樣也是使用組合模式,但是狀態是封裝了實體類的所有操作,而策略只是改變了他具體行事的某一個或幾個方法。策略的意圖在於演算法的封裝與動態改變。

Template Method(模版):定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。Template Method 使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。聯想,大牛定義父抽象類,把高難度演算法寫好封裝在父抽象類中並定義好演算法執行步驟,又菜鳥基礎該抽象類,實現那些無聊的邏輯方法。

Visitor(訪問者):表示一個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。通過別人去訪問自己的方法。