設計模式面面觀(8):創建型模式總結
系統
1752 0
創建型模式總結
創建型模式總結
1.
創建型模式成員
溫故而知新,看完前面
7
章的朋友首先閉上眼睛認真的想想一個很簡單的問題:創建型模式到底有幾種模式?
<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 141.75pt; HEIGHT: 172.5pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5CWensi%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="創建型模式成員"></imagedata></shape>
這里我特意排了下次序,依據實現的難易程度由左到右遞增。
2.
創建型模式討論
l
特點:創建型模式他主要解決的是對新類創建(
New
)動作的封裝處理,所以我把創建型模式歸結為對新實體的創建工作中存在變化的地方進行封裝,除
Singleton
模式外其他模式都是解決的
new
帶來的耦合關系。
l
優點:
1)
動態創建新的實體類,用戶可以根據不同的需求創建不同的產品類(擅長處理易變類的創建工作)
2)
將類創建工作與業務邏輯操作分開,形成獨立的創建環境,用戶可以依據自己的需要創建適合自己的實體類。
l
缺點:
1)
每創建一個實例類都要額外的去創建一個創建這個實例類的類(工廠類),
Prototype
模式其實也是一個工廠,只不過他的工廠就是本身而已,所以
Prototype
嚴格上來說他是一個特殊的工廠
2)
由于
1
)的問題存在所以我們在創建實體類是,需要重復定義他的創建類。這個我們在抽象工廠中提到過這個問題當產品系列增加新品種的時候抽象工廠模式必須調整各個工廠類的實例方法(體力活)
l
3.
各模式的解決方向匯總表
模式名稱
|
適用環境
|
主意
|
單件模式(
Singleton
)
|
控制類實例化個數(通常為單個)
|
可以通過他的實現原理解決創建固定類實例個數的需求
|
原型模式(
Prototype
)
|
通過克隆解決一些類操作接口固定的易變類實例,原型模式可以用工廠、抽象工廠、生成器模式相互轉換
|
合理利用原型模式可以規避一些工廠模式創建工廠類的繁瑣工作
|
工廠模式
(Factory)
|
動態實例化一個客戶需要的類,不考慮類的其他復雜變化需求
|
我們在用創建型模式解決問題時通常是從工廠模式開始設計,當遇到復雜變化時,在考慮重構為其他三種工廠模式(
Abstract Factory,Builder,Prototype
)
|
抽象工廠模式
(AbstractFarctory
)
|
擅長與創建相關,相互依賴的系列類,把正在創建類實例的工作下放到子類工廠去操作
|
抽象工廠是對一系列的類創建工作,提出的一種解決方案
|
生成器模式(
Builder
)
|
創建一個有多個類,按照一定業務邏輯組合的復合型類
|
針對復雜類創建工作提出的解決方案
|
創建型模式
|
設計模式面面觀(8):創建型模式總結
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元