設計模式 |
GoF 的描述 |
我的理解 |
Singleton 單件模式 |
保證一個類僅有一個實例,并提供一個該實例全局的訪問點
|
控制實體對象的數量 |
Abstract Factory 抽象工廠模式 |
提供一個接口,讓該接口負責創(chuàng)建一系列
“
相關或者相互依賴的對象
”
,無需指定他們的具體類
|
解決一個系列的對象變化的問題 |
Builder 生成器模式 |
將一個復雜對象的構建與其表示向分離,使得同樣的構建過程可以創(chuàng)建不同的表示
|
應對項目中一些復雜對象的創(chuàng)建工作。所謂 “ 復雜對象 ” ,是指:此對象中還含有其它的子對象 |
Factory Method 工廠方法模式 |
定義一個用于創(chuàng)建對象的接口,讓子類決定實例化那個類。
FactoryMethod
使得一個類的實例化延遲到子類
|
解決的是“某個對象”的創(chuàng)建工作,由于需求的變化,這個對象常常面臨著劇烈的變化,但是這個對象擁有的接口相對穩(wěn)定。也就是說:枝節(jié)常常發(fā)生變化,但是枝節(jié)與主干的接口相對穩(wěn)定 |
Prototype 原形模式 |
使用原型實例指定創(chuàng)建對象的種類,然后通過拷貝這些原型來創(chuàng)建新的對象 |
某些結構復雜的對象的創(chuàng)建工作;由于需求的變化,這些對象經常面臨著劇烈的變化,但是他們卻擁有比較穩(wěn)定一致的接口 |
??????
在學習的過程中,覺得從功能上看 Abstract Factory 模式和 Builder 模式容易混淆, Factory Method 模式和 Prototype 模式不好區(qū)分。 Singleton 模式沒什么太大的困難。下面就來分析一下前四種模式。
一、 Abstract Factory 模式和 Builder 模式:
Abstract Factory 是應對一系列對象的創(chuàng)建的問題,正如前面文章中舉的例子,對于創(chuàng)建一個汽車對象來說, Abstract Factory 模式更關注一系列的對象的創(chuàng)建,或者說是汽車類型中的各個部分,如: Wheel 、 Engine 、 Body 等等類型的創(chuàng)建。換句話說關注點在這一系列對象上。
Builder 是應對一個復雜對象創(chuàng)建的問題,或者說是針對這個復雜對象中的子對象的創(chuàng)建的問題。以汽車的例子來說,我覺得比起 Abstract Factory 模式, Builder 模式相對注重汽車類型(上面所說的“復雜對象”)本身以及其各個部分( Wheel 、 Engine 、 Body 等等)類型的創(chuàng)建。 Builder 模式要求這個復雜的類型(汽車)中的各個子類型的結合部分相對穩(wěn)定,用例子說明就是對于汽車來說,無論用什么配件組裝,個個配件的組裝方式都一樣,有相對穩(wěn)定的接口。對于這輛車你用什么牌子的 Wheel 、什么牌子的 Engine 可能變化會很大很頻繁。
二、 Factory Method 模式和 Prototype 模式:
開始我覺得這兩種模式從功能上講是一樣的(個人觀點),都是封裝了對對象的創(chuàng)建,只不過 Prototype 模式是用 原型克隆 進行拷貝來完成對象的創(chuàng)建,在這之中還應注意淺拷貝和深拷貝的區(qū)別。在向同事請教后有點明白。這兩種模式在應用場景上還是一定的區(qū)別的。
Factory Method 模式是重新創(chuàng)建一個對象
Prototype
模式是利用現有的對象進行克隆,當兩個對象或多個對象雷同的時候,可以考慮用一個已創(chuàng)建的對象去克隆出其余的對象。
???以上是對創(chuàng)建型模式的總結,如有不對的觀點歡迎指正。