單例和原型模式 建立型

2021-09-20 15:00:27 字數 1011 閱讀 2860

確保乙個特殊類的例項是獨一無二的(它是這個類的唯一例項),並且這個例項易於被訪問。

解決方案

1)全域性變數:乙個全域性變數使得乙個物件可以被訪問,但它不能防止你例項化多個物件。因為你的任何**都能修改全域性變數,這將不可避免的引起更多除錯的意外。換句話說,全域性變數的狀態總是會出現一些問題的。

2)類建構函式私有和類自身的靜態方法:讓類自身負責儲存它的唯一例項(靜態變數)。這個類可以保證沒有其他例項可以被建立(通過擷取建立新物件的請求) ,並且它可以提供乙個訪問該例項的方法(靜態方法)。這就是singleton模式。(dubbo check 執行緒安全問題等)

單件模式可以多個例項

單件模式並不是說乙個類只能只有乙個例項。假設我們使用在乙個web 請求或者程序裡面。乙個使用者id對應的某個類只能有唯一的例項。我們的user類,可以有多個例項,每個例項對應乙個uid. 例項列表註冊到map中以uid為key關聯起來。

建立型模式一般是用來建立乙個新的物件,然後我們使用這個物件完成一些物件的操作,我們通過原型模式可以快速的建立乙個物件而不需要提供專門的new()操作就可以快速完成物件的建立,這無疑是一種非常有效的方式,快速的建立乙個新的物件。

例子1:

孫悟空拔下一嘬猴毛,輕輕一吹就會變出好多的孫悟空來。

例子2:

下面是乙個郵寄快遞的場景:

「給我寄個快遞。」顧客說。

「寄往什麼地方?寄給……?」你問。

「和上次差不多一樣,只是郵寄給另外乙個位址,這裡是郵寄位址……」顧客一邊說一邊把寫有郵寄位址的紙條給你。

「好!」你愉快地答應,因為你儲存了使用者的以前郵寄資訊,只要複製這些資料,然後通過簡單的修改就可以快速地建立新的快遞資料了。

通過複製(轉殖、拷貝)乙個指定型別的物件來建立更多同型別的物件。這個指定的物件可被稱為「原型」物件,也就是通過複製原型物件來得到更多同型別的物件。即原型設計模式。在php的很多模板庫,都用到clone。如smarty等。

建立型 原型模式

將乙個物件作為原型,對其進行複製 轉殖,產生乙個和原物件類似的新物件。淺複製 將乙個物件複製後,基本資料型別的變數都會重新建立,而引用型別,指向的還是原物件所指向的。深複製 將乙個物件複製後,不論是基本資料型別還有引用型別,都是重新建立的。優點 當直接建立物件的代價比較大時,採用這種模式會使建立效能...

建立型 原型模式

1 原型模式意圖 用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。2 場景描述 原型模式,利用例項自身的轉殖功能來得到與原例項相同的新的例項。設想西遊記中的乙個場景,唐僧師徒四人 白龍馬除外 不過,該唐僧是個多事 喜歡使喚徒弟的唐僧。每當有事時,唐僧便會使喚他的三個徒弟去做。但是三個...

建立型設計 原型模式

宣告一下 本文的文字多數文字都是來自網上,只有例子是自己寫的。因為自我感覺還沒有能力能夠系統的解釋乙個模式,已經有現成的比較完善的說明,就不重複造輪子哈。原型模式是一種建立型設計模式,它通過複製乙個已經存在的例項來返回新的例項,而不是新建例項.被複製的例項就是我們所稱的原型,這個原型是可定製的。原型...