建造者模式(Builder Pattern)
封裝一個產品的構造過程,並允許按步驟構造。
還有一個通俗的定義是:將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
簡單點說,就是客戶類想要創建結構或者邏輯特別複雜的產品對象時,讓建造者幫忙構建產品,建造者負責產品各個部件的構建以及最終產品的組裝。
客戶類指示構造器按什麼流程構造產品,並可以通過它得到最終構建好的產品。具體的構建者負責創建並保存真正的產品。
這樣,就將一個複雜對象的創建過程封裝起來了。客戶類只看到抽象的構造器接口IBuilder,所以實現可以被隨便替換。建造者模式經常被用來創建組合結構類型的對象。但對客戶類而言,需要了解更多的關於產品的知識。
建造者模式(Builder Pattern)也可以翻譯成 創建者模式/構造者模式/構造器模式/生成器模式。
具體的例子也很簡單就不貼了,可以百度一下,但要注意產品Product和具體建造者ConcreteBuilder是組合關係,具體建造者必須負責產品實例的生命週期,一般在構造器中實例化產品。
原型模式(Prototype Pattern)
用原型實例指定創建對象的種類,並通過拷貝這些原型創建新的對象。
簡單點說,就是複製已有的實例來創建新的實例。當然,可以完全複製原型實例所有的資源(深複製)也可以引用原型實例的資源(淺複製)。
在Java中基本類型數據都是深複製,但一般引用類型數據是淺複製的,也就是說引用類型一般都是指向相同的引用對象。原型類Prototype需要實現Cloneable接口(在運行時通知虛擬機可以安全地在實現了此接口的類上使用clone方法。在java虛擬機中,只有實現了這個接口的類纔可以被拷貝,否則在運行時會拋出CloneNotSupportedException異常),重寫Object類中的clone方法來獲取拷貝的對象,因其原來作用域是protected的,所以Prototype類需要將clone方法的作用域修改爲public類型。如果要實現深複製,只需讓兩個類都實現Cloneable接口並重載clone()方法,在客戶類中指向新clone的引用即可。但要注意,並不是所有的類都能深度clone,像String、StringBuffer等對象是不能深複製的。
使用原型模式創建對象比直接new一個對象在性能上要好的多,因爲Object類的clone方法是一個native方法,效率特別高,特別是複製大對象時,性能的差別非常明顯。
使用原型模式的另一個好處是簡化對象的創建,使得創建對象就像我們在編輯文檔時的複製粘貼一樣簡單。但也要認識到,對象的複製有時會相當複雜。
單例模式(Singleton Pattern)
我的這篇文章:單例類
最常用的就是枚舉單例和雙檢鎖單例,其它的什麼懶漢餓漢就不要管了。