1.Factory 方法模式(Factory Method)
定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類,原廠模式使一個類的執行個體化延遲到其子類.
例如:雷鋒協助別人,雷鋒並不指具體哪個人,可以是大學生、社區志願者等等;我們可以寫一個雷鋒工廠介面IFactory(建立對象的介面),然後,讓ColleageFactory類、VolunteerFactory類類來實現這個介面(子類)。如果需增加子類增加代碼即可,克服了簡單工廠違背開放-封閉原則的缺點,又保持了封裝對象建立過程的優點。
2.抽象原廠模式(Abstract Factory)
提供一個建立一系列或相關依賴對象的介面,而無需指定它們具體的類.
例如:資料訪問程式,我們對資料庫操作時,可能會SQL server、DB2、Access等不同資料庫操作,可能給不同表插入、獲得的記錄。
如果想在SQL server資料庫中,在User表增加一條記錄,我們可以寫一個介面IFactory,再寫一個SQLserverFactory類,對SQL server 資料庫中表User增加記錄;當你想對Access資料庫中User表操作時,增加一個AccessFactory類,即可。另外為瞭解耦用戶端直接操作資料庫,需要把對資料庫的操作提取出一個介面IUser。
3.建造者模式(Builder)
例如:建造小人,有胖人、瘦人、高的、矮的等等,在建造時難免會出錯,少造個腿或胳膊等,利用建造這模式可解決這個問題。
Builder是一個抽象類別,定義了一些基本建造方法(人的基本組成部分,如頭、胳膊、腿、身體),具體的高、瘦等細節由子類來實現,用Director類使對象建造過程與外部(用戶端)分離,減少耦合。
4.原型模式(Prototype)
用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象.
例如:簡曆複印,我們有一份原簡曆,需要複製多份或複製出和原簡曆差不多的簡曆,就可用原型模式寫一個Prototype抽象類別,裡面定義一個抽象Clone()方法,然後,由ConcretePrototype具體實現。這裡面經常涉及的淺複製和深複製問題,應該注意。
5.單例模式(Singleton)
保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點.
通常我們可以讓一個全域變數使得一個對象被訪問,但它不能防止你執行個體化多個對象。一個最好的辦法就是,讓類自身負責儲存它的唯一執行個體。這個類可以保證沒有其他執行個體可以被建立,並且它可以提供一個訪問該執行個體的方法。
單例模式可能會有安全問題,當多線程調用GetInstance()時,可以用lock語句是一段代碼位於臨界區,一個線程進入後,另一個線程就不能進入這段代碼區,直到第一個線程釋放該對象。