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

  • 2019 年 10 月 3 日
  • 筆記

一.前言

  面向對象程式碼經常用到的就是創建對象,

  創建型設計模式就是把對象的創建和對象的使用分離開。

  在寫類的時候使用創建型模式會使得之後獲取對象方便。

 

二.四種創建者模式:

 

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的子類

 

 

 

  

Tags: