1. 程式人生 > >java設計模式3.建造者模式、原型模式

java設計模式3.建造者模式、原型模式

原型模式 情況 nbsp 寫到 指向 應用程序 模式 接口 抽象

  • 建造者模式

一個產品常有不同的組成部分作為產品的零件,有些情況下,一個對象會有一些重要的性質,在它們沒有恰當的值之前,對象不能作為一個完整的產品使用,有些時候,一個對象的一些性質必須按照某個順序賦值才有意義。建造者模式利用一個導演者對象和具體建造者對象,按步驟建造出所有零件,從而建造出完整的產品對象。建造者模式產品的結構的過程對客戶端隱藏起來,把對建造過程進行指揮的責任和具體建造零件的責任分割開來,達到責任劃分和封裝的目的。

  • 抽象建造者角色:給出一個抽象接口,以規範產品對象的各個組成部分的建造。通常此接口獨立於應用的業務邏輯。
  • 具體建造者角色:與應用程序緊密相關的一些類,它們在應用程序調用下創建產品實例。
  • 導演者角色:負責調用具體建造者創建產品對象,導演者並沒有產品類的具體知識,真正擁有產品類具體知識的是具體建造者角色。
  • 產品角色:建造的對象。

導演者角色是與客戶端打交道的角色。導演者將客戶端創建產品的請求劃分為對各個零件的建造請求,再將這些請求委派給具體建造者角色。具體建造者進行建造工作,但是不為客戶端感知。

  • 原型模式

通過給出一個原型對象來指明所要創建的對象的類型,然後用復制這個原型對象的辦法創建出更多同類型的對象。

  • 客戶角色:客戶類提出創建對象的請求。
  • 抽象原型角色:給出具體原型類需要的所有接口。
  • 具體原型角色:被復制的對象。

對象復制

  1. 淺復制:被復制對象的所有變量都含有與原來對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。
  2. 深復制:被復制對象的所有變量都含有與原來對象相同的值,而所有的對其他對象的引用指向被復制過的新對象,但是深復制深入到多少層,是一個不易確定的問題。利用序列化可以實現深復制:即把對象寫到流裏,然後再把對象從流裏讀出來即實現一個對象的拷貝,而原來對象仍然存在於JVM中。

#筆記內容參考《java與模式》

java設計模式3.建造者模式、原型模式