工廠方法模式和抽象工廠模式

2021-08-25 03:02:06 字數 1589 閱讀 5649

工廠模式是:定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,使乙個類的例項化延遲到子類。

它有個特點,就是通常工廠的類層次與產品的類層次幾乎是一樣的樹。如果說工廠是你的影子,你就是產品了。在你平時未用到模式的時候,你需要什麼就new乙個,這種情況就好比你躺在地上,人影合一了。那什麼時候需要工廠模式呢。看看定義:「使乙個類的例項化延遲到子類」,這個是關鍵,當你有必要延遲例項化的時候才需要用工廠模式。那什麼情況下要延遲呢,在單例模式中有惰性單例(就是單例那個靜態屬性)……等等,就是一開始你還不適合立刻就建立該物件,你還需要一些資源或其它準備工作。整個系統的執行不像單個程式那樣,系統需要很多資源和多方面的協同工作。

抽象工廠比工廠模式複雜的多。如果樓主說他們像可能是他們都叫工廠,都生成產品,都是介面型設計模式。但是我覺得他們是兩個不同的設計模式。首先他們的目的是不同的。工廠是為了「延遲建立」,而抽象工廠是提供一系列的介面,是為了組織建立物件的靈活性,避免重複,避免耦合低內聚。

設計模式本身語言晦澀難懂,這個抽象工廠我也是沒次都看著頭昏眼花^_^,舉個運用他的場景:

1。你有兩台單色印表機,一台黑白墨的,一台彩墨的。

2。你有兩種檔案要打,一種講演搞,一種

3。要求是講演稿如果是有圖就打黑白的,沒圖打彩色的,**有字的就打黑白的,沒字就打彩色的。

class print

void dopicture()

……

} class print

void dopicture()……}

上面的這個場景就是可以運用抽象工廠來重構的。

public abstract class absfactory

public class colo***ctory extends absfactory

picprint getpicprint()

} public class noncolo***ctory extends absfactory

picprint getpicprint()

} public abstract class talkprint

public class colortalkprint extends talkprint

public class noncolortalkprint extends talkprint

public abstract class picprint

public class colorpicprint extends picprint

public class noncolorpicprint extends picprint

[/code]

進一步解釋這個場景,就是當你做相似的工作又多種選擇的時候,可以考慮用抽象工廠。

這裡你要列印各種檔案是一組相似的工作,列印有彩色、黑白等針對列印的不同要求。

這裡僅僅舉了乙個方面的例子。

我們可以看出,雖然抽象工廠和工廠在**形式上很相似,甚至抽象工作可以有工廠來拓展,但是他們的出發點是不一樣的。

在搞單例模式的時候我們針對多執行緒拓展了為「雙重檢查模式」,那是同乙個場景同乙個任務,跟這裡是不一樣的。

抽象工廠模式和工廠方法模式

抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態,指的是當有多個抽象角色時使用的一種設計模式,即通過介面和實現類。在不必指定具體產品的情況下,建立多個產品族產品物件。依據的是裡式替換原則。即抽象工廠模式的介面會有不同的實現類 例項 定義兩個類 public class user為類建...

工廠方法模式 和 抽象工廠模式

1.簡介 相比於簡單工廠,工廠方法是使用乙個工廠類去建立乙個物件 irace介面和human類 ne類都和上文簡單工廠一樣 using system using system.collections.generic using system.linq using system.text using ...

抽象工廠模式(工廠方法模式)

工廠方法模式是在簡單工廠模式的基礎之上將建立具體產品類的工廠進一步抽象,使產品的建立不依賴具體的工廠,只需要依賴抽象工廠,後續如果要新增新的產品和工廠,只需要實現該抽象工廠的介面即可。建立抽象工廠和產品 public inte ce productfactory public inte ce pro...