1. 程式人生 > >設計模式1--建立型模式

設計模式1--建立型模式

一.前言

  面向物件程式碼經常用到的就是建立物件,

  建立型設計模式就是把物件的建立和物件的使用分離開。

  在寫類的時候使用建立型模式會使得之後獲取物件方便。

 

二.四種建立者模式:

 

1.單例模式

理解:一個類只有一個物件,節省了記憶體,4種可用方法 經常進行建立和銷燬的物件,經常用到的重量級物件用單例模式(比如資料來源,session工 廠)
構造方法:(每句話都是一小段程式碼 )
(1).餓漢式2種(靜態變數/靜態程式碼塊):

  類內建立靜態物件例項 並提供靜態get方法  (即構造器私有化)

    靜態變數類載入時就執行,所以沒有懶載入,

    可能造成記憶體浪費 靜態變數類載入相關機制載入一次,保證了執行緒安全

  

 

 

 

(2).懶漢式3種:

  類內定義靜態物件成員變數 並由靜態get方法提供物件例項 (instance方法過濾構造方法)

     get方法不加鎖執行緒不安全,方法加鎖效率低,instance==null內加鎖執行緒不安全                              

     要控制的是單物件,鎖資源只 是控制順序

 

 

 


(3).雙重檢查(好):

  類內定義靜態物件成員變數 並由靜態get方法提供物件例項  在第一次建立物件時,對類載入器加鎖並進行第二次空物件判斷


(4).靜態內部類方法:  

  構造器私有化,在內部類中建立靜態物件例項,並提供get方

    利用靜態內部類機制,安全高效,推薦使用

 

5).列舉方式:

  給類寫成列舉類 避免多執行緒,防止反序列化,推薦使用

 

 

2.原型模式

  情況:要建立許多一樣的物件時

  做法:建立者類類繼承cloneable介面

  例子:生產出10只一樣的羊

    新建十個相同的羊的程式碼變成兩部分:使用者部分和建立者部分

    建立者就是羊類,實現cloneable介面,遍歷屬性的工作交給clone方法,之後新增屬 性使用者不 必理會,等於屬性的擴充套件性在複製時增強了。

    使用者類再生成第一隻羊後,其它羊就可以呼叫第一隻羊的clone方法得到;新增羊屬性,提供者類的程式碼只需在第一隻羊改變

 

3.1  簡單工廠模式

 

理解:將抽象類的建立程式碼封裝成一個工廠物件,對外只要求一個型別引數

 

把程式碼分成4部分,client,使用類(直接呼叫創造者類),工廠類和創造者類

  使用類:聚合工廠類

  工廠類:工廠方法根據 具體創造者類標誌,選擇進行 相應創造類的構造

  如果加功能類只改工廠方法

 

3.2  抽象工廠模式

 

理解:當建立者類很多時,簡單工廠的判斷就很多else / if ,所以根據建立者型別不同進行分類,

  一個類別一個工廠,對多工廠類共同實現工廠介面,工廠介面被使用類聚合

 

  使用類:只聚合一個抽象工廠,生產方法只需提供建立者類類的統一介面

  抽象工廠介面:定義工廠方法

  工廠類:和簡單工廠類相同,工廠方法要型別引數

  建立者類:再按一個標準分屬於不同工廠類,

  client:新建使用者類和工廠類物件

    將工廠物件傳給使用者類

    將型別標識傳給構造方法

 

 

4  建造者模式

適用點:適合方法相似的類的情況。

理解:建造者模式主要是建造者類聚合了產品類並且定義了建築方法被子類重寫,並被導演類聚合

    導演類根據的是傳入的建造子類物件生成產品。

    

 

示例:工廠建房子

  

  把程式碼分成4部分,client,使用類(直接呼叫功能類),建造者類和產品類

        新增子類創造者,使用類和產品類都不變

  HouseDirector是工廠,聚合HouseBuilder介面/抽象類,含有它的構造器;有構造房子方法,穩定

  House和HouseBuilder是產品和流程的解耦

  House就是一個Bean,穩定

  HouseBuilder介面就是Bean物件的各種方法的抽象

      其實現類具體實現該方法

  Client即使用者(前端)使用HouseBuiler的子類