構造器(Constructor)模式
實際上就是我們通常使用的一種最基本的類,其構造器帶有參數。
比如:
function Car( model, year, miles ) {
this.model = model; this.year = year; this.miles = miles; this.toString = function () { return this.model + " has done " + this.miles + " miles"; }; } var civic = new Car( "Honda Civic", 2009, 20000 ); var mondeo = new Car( "Ford Mondeo", 2010, 5000 );
模塊(Module)模式
模塊模式是為類提供私有變量和特權方法(有權訪問私有變量和私有函數的公有方法)的方法。在JavaScript,就可通過閉包的方式,模擬實現模塊模式。
對象字面量:
var myModule = { variableKey: variableValue, getKey: function () { // ... } };
嚴格上講,對象字面量實現的只是不完整的模塊模式,因為無法達到變量、方法私有效果。不過確實有分離和組織代碼的能力,也就算一種簡略的模塊模式的實現方式
簡單例子:
var myModule = (function(){ var privateVar = 10; return { getPrivateVar : function(){ return privateVar; } } })();
揭示(Revealling)模塊模式
這種是模塊模式的改進版本,它是在模塊代碼底部,定義所有對外公布的函數(僅是指針)和變量。
var myRevealingModule = (function () { var privateVar = "Ben Cherry", publicVar = "Hey there!"; function privateFunction() { console.log( "Name:" + privateVar ); } function publicSetName( strName ) { privateVar = strName; } function publicGetName() { privateFunction(); } // Reveal public pointers to // private functions and properties return { setName: publicSetName, greeting: publicVar, getName: publicGetName }; })();
這種模式我經常使用,它很容易指出哪些函數和變量可以被公開訪問,增強了可讀性。
單例(Singleton)模式
單例模式它限制了類的實例化次數只能一次。在實例不存在的情況下,可以通過一個方法創建一個類來實現創建類的新實例;如果實例已經存在,它會簡單返回該對象的引用。
它擁有一個私有構造函數,這確保用戶無法通過new直接實例它。除此之外,該模式中包含一個靜態私有成員變量instance與靜態公有方法Instance()。Instance()方法負責檢驗並實例化自己,然后存儲在靜態成員變量中,以確保只有一個實例被創建。比如下面的例子代碼(若屬於多線程環境,需要考慮線程之間的同步):
/// <summary> /// A simple singleton class implements. /// </summary> public sealed class Singleton { private static Singleton _instance = null; /// <summary> /// Prevents a default instance of the /// <see cref="Singleton"/> class from being created. /// </summary> private Singleton() { } /// <summary> /// Gets the instance. /// </summary> public static Singleton Instance { get { return _instance ?? (_instance = new Singleton()); } } }
工廠(Factory)模式
工廠模式提供一個通用的接口來創建對象。通常還可以細分為:簡單工廠、工廠方法和抽象工廠模式。
簡單工廠模式,就是將一些有共同點的對象,通過一個工廠來進行統一的方法來創建。這類模式通常是對對象的方法進行抽象,並在工廠類中調用各自類的構造方法,后續使用對象的抽象方法來調用實際對象的接口。個人覺得簡單工廠模式跟構造模式有一些相似之處。
工廠方法模式:可以看着是在簡單工廠模式的基礎上,增加一次對工廠的抽象,在實際的使用中,我們通過具體的工廠類來創建相應的對象。
抽象工廠模式:更加復雜的一種模式, 有抽象工廠、抽象對象,抽象工廠中有創建不同抽象對象的方法。即在工廠方法的基礎上,為抽象工廠增加創建不同對象的接口而形成的一種代碼組織。
這三種工廠模式一個比一個復雜,在實際使用時需要掂量一下,繼續引用參考意見:
簡單工廠模式最大的缺點是違背了“開閉原則”,當增加了新的產品時,需要去修改簡單工廠類的結構。工廠方法模式主要是針對單一產品結構的情景,而抽象工廠模式是針對多級產品結構的場景。
OO的一些原則
1.OCP(開閉原則,Open-Closed Principle):一個軟件的實體應當對擴展開放,對修改關閉。也就是說,對於一個已有的軟件,如果需要擴展,應當在不需修改
已有代碼的基礎上進行。
2.DIP(依賴倒轉原則,Dependence Inversion Principle):要針對接口編程,不要針對實現編程。簡單點說,對於不同層次的編程,高層次暴露給低層次
的應當只是接口,而不是它的具體類。
3.LoD(迪米特法則,Law of Demeter):只與你直接的朋友通信,而避免和陌生人通信。
可參見:https://wenku.baidu.com/view/60c6ca21192e45361066f5e0.html
中介者(Mediator)模式定義
中介者作為一種行為設計模式,它公開一個統一的接口,系統的不同對象或組件可以通過該接口進行通信。增加一個中介者對象后,所有的相關對象通過中介者對象來通信,而不是互相引用,所以當一個對象發生改變時,只需要通知中介者對象即可。
中介者模式與觀察者模式差異
1. 調度中心不同。
中介者模式調度是由中介者,而觀察者模式調度的是觀察者;
中介者模式與訂閱/發布模式的調度方式更像,都是獨立一個集中的調度中心。
2. 中介者模式參與了對象行為的實現(例如上面示例的飛機起飛),而觀察者模式並不參與,僅做目標通知。
中介者模式與訂閱/發布模式差異
1. 中介者模式與業務相關,訂閱/發布模式與業務無關。(這是我覺得最大差別)
雖然實現結構非常相像,但是很明顯的是,中介者模式參與業務相關東西,所以內容是大相徑庭的。
2. 兩個模式都有集中調度效果,對象之間不直接參與通信。
原型(prototype)模式定義
原型模式(創建型設計模式)是用一個對象做模板,克隆出新對象。
另外原型模式中的克隆分為"淺克隆"和"深克隆":
淺克隆: 對值類型的成員變量進行值的復制,對引用類型的成員變量只復制引用,不復制引用的對象。
深克隆: 對值類型的成員變量進行值的復制,對引用類型的成員變量也進行引用對象的復制。


......
http://www.cnblogs.com/lovesong/category/839413.html