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