1. 程式人生 > >【設計模式】單例模式 |建造者模式 |原型模式

【設計模式】單例模式 |建造者模式 |原型模式

單例模式

通常我們讓一個全域性變數使得一個物件被訪問,但它不能防止你例項化多個物件。一個最好的辦法就是,讓類自身負責八寸他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供一個訪問該例項的方法。

單例模式(Singletion):保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

這裡寫圖片描述
優點:
它會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。
可以靈活的更改例項化過程

缺點:
不能解決刪除單個物件的問題

適用環境:

  • 當類只能有一個例項而且客戶可以從一個眾所周知的訪問點訪問它時。
  • 當這個唯一例項應該是通過子類化可擴充套件的,並且客戶應該無需更改程式碼就能使用一個擴充套件的例項時。

例子:一個系統中只能有一個視窗管理器或者檔案系統,若是存在多個,再使用的時候就意味著會彈出多個,這樣對記憶體空間也是一種浪費。

建造者模式

看到這個模式的時候,感覺就是自己是一個工程師,可以建立很多意想不到的產品。它也稱為:生成器模式。可以將產品的內部表象與產品的生成過程分割開來,從而可以使一個建造過程具有不同的內部表象的產品物件。

建造者模式(Builder):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

這裡寫圖片描述

適用環境:

  • 當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時適用的模式
  • 當構造過程必須允許被構造的物件有不同表示時。
    例子:在這個智慧的世界,一個智慧的工廠裡面,每個地方都有自己應該做的事情人就是指揮者,將機器調整到要做出的產品的樣子,之後只要不用思考要怎麼弄,只要按照要求做好就可啦。

原型模式

其實就是從一個物件再建立另外一個可制訂的物件,而且不需要知道任何建立的細節。

原型模式(Prototyper):用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。。

這裡寫圖片描述
適用環境:

  • 當一個類的例項只能有幾個不同狀態組合中的一種時。建立相應數目的原型並克隆它們可能比每次用合適的狀態手工例項化該類更方便一些。
  • 為了避免建立一個與產品類層次平行的工廠類層次時

深複製與淺複製


  • 深複製:把引用物件的變數指向複製過程的新物件
  • 淺複製:被複制物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用都仍然指向原來的物件

例子:深複製感覺有點像克隆羊的感覺,複製出來是一個新的個體,而淺複製則是給這隻羊改了名字,儘管名字不一樣了但是還是這隻羊。