一.前言
面向對象代碼經常用到的就是創建對象,
創建型設計模式就是把對象的創建和對象的使用分離開。
在寫類的時候使用創建型模式會使得之后獲取對象方便。
二.四種創建者模式:
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的子類