確定一個特殊類的執行個體是獨一無二的(它是這個類的唯一執行個體),并且這個執行個體易于被通路。
解決方案
1)全局變量:一個全局變量使得一個對象可以被通路,但它不能防止你執行個體化多個對象。因為你的任何代碼都能修改全局變量,這将不可避免的引起更多調試的意外。換句話說,全局變量的狀态總是會出現一些問題的。
2)類構造函數私有和類自身的靜态方法:讓類自身負責儲存它的唯一執行個體(靜态變量)。這個類可以保證沒有其他執行個體可以被建立(通過截取建立新對象的請求) ,并且它可以提供一個通路該執行個體的方法(靜态方法)。這就是Singleton模式。(dubbo check 線程安全問題等)
單件模式可以多個執行個體
單件模式并不是說一個類隻能隻有一個執行個體。假設我們使用在一個web 請求或者程序裡面。一個使用者id對應的某個類隻能有唯一的執行個體。我們的User類,可以有多個執行個體,每個執行個體對應一個uid. 執行個體清單注冊到map中以uid為key關聯起來。
建立型模式一般是用來建立一個新的對象,然後我們使用這個對象完成一些對象的操作,我們通過原型模式可以快速的建立一個對象而不需要提供專門的new()操作就可以快速完成對象的建立,這無疑是一種非常有效的方式,快速的建立一個新的對象。
例子1:
孫悟空拔下一嘬猴毛,輕輕一吹就會變出好多的孫悟空來。
例子2:
下面是一個郵寄快遞的場景:
“給我寄個快遞。”顧客說。
“寄往什麼地方?寄給……?”你問。
“和上次差不多一樣,隻是郵寄給另外一個位址,這裡是郵寄位址……”顧客一邊說一邊把寫有郵寄位址的紙條給你。
“好!”你愉快地答應,因為你儲存了使用者的以前郵寄資訊,隻要複制這些資料,然後通過簡單的修改就可以快速地建立新的快遞資料了。
通過複制(克隆、拷貝)一個指定類型的對象來建立更多同類型的對象。這個指定的對象可被稱為“原型”對象,也就是通過複制原型對象來得到更多同類型的對象。即原型設計模式。在php的很多模闆庫,都用到clone。如smarty等。