我的Java設計模式 工廠方法模式

2021-08-08 14:12:37 字數 1985 閱讀 6032

女朋友dodo鬧脾氣,氣勢洶洶的說「我要吃雪糕」。筆者心裡啊樂滋滋的,一支雪糕就能哄回來,不亦樂乎?!

但是,雪糕買回來了,她竟然說「不想吃雪糕了,突然想吃披薩」。呵呵了,憋了一股勁「沒問題」,又屁顛屁顛的去把披薩買回來。

世事難料,dodo同學又放大招了,「披薩太上火了,我要吃芝士蛋糕」。

定義乙個建立物件的工廠介面,工廠方法將例項化推遲到子類中。

定義總是抽象的,先放出工廠方法模式的uml圖如下所示:

從上圖可以看出,工廠方法模式涉及到以下四個角色的概念:

- 抽象工廠角色:工廠方法模式的核心,建立產品的工廠類必須實現該介面。

- 具體工廠角色:該角色實現了抽象工廠介面,具體如何建立產品類就是在該實現類完成。

- 抽象產品角色:所有產品類的超類,負責實現產品共性的抽象定義。

- 具體產品角色:該角色實現了抽象產品介面,負責具體的不同產品業務邏輯。

抽象工廠角色**如下:

public inte***ce factory
這裡做出生產雪糕、披薩的工廠,有了工廠才能生產對應的產品,具體工廠角色**如下:

// 雪糕的工廠,負責生產雪糕

public class icecreamfactory implements factory

}

上面看到抽象角色product,看**:

public inte***ce product
具體角色**如下:

public class icecream implements product 

}

ok,涉及到工廠方式模式系統的**基本完成,下面看看客戶端怎麼使用工廠模式,雪糕準備就緒:

public class client 

}

執行客戶端**,結果如下:

雪糕做好了!!

雪糕的order已經完成!雪糕不吃,吃披薩?ok,現在就做披薩。同樣的先實現抽象工廠和抽象產品角色。

披薩工廠實現如下:

// 披薩的工廠,負責生產披薩

public class pizzafactory implements factory

}

接下來就是披薩:

public class pizza implements product 

}

現在我們在客戶端中實現生產披薩,**如下:

public class client 

}

執行結果如下:

雪糕做好了!!

披薩做好了!!

1)優秀的擴充套件性。假如披薩不想吃了,想吃芝士蛋糕,只需要增加芝士蛋糕的具體工廠和具體產品類,不會影響其他產品的生產。

2)大降低**的耦合度,客戶端最終得到的是產品本身,而不需要知道和操作產品的生產過程。

1)增加新產品時,需要增加具體的工廠類和具體的產品類,當產品數量多的時候就會造成系統的複雜度增大,也增加了對系統理解的難度。

跟策略模式對比:問得最多的乙個問題。工廠方法模式和策略的模式有什麼區別?區別在於,策略模式強調的是提供不同的策略方案,而工廠方法模式強調的是產品本身。

策略模式接下來也會說到,把策略模式吃透了,回頭再跟工廠方法模式對比的時候就恍然大悟了。

設計模式 建立型 工廠方法模式 多個工廠方法模式

多個工廠方法模式,屬於工廠方法模式中的一種。它是一種建立型模式。是對普通簡單工廠模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件.public class gunfactory public igun getgunm4a1 ...

設計模式之工廠方法模式VS簡單工廠方法模式

名詞解釋 簡單工廠 這個實在是沒什麼解釋的,就是乙個工廠類,然後有乙個方法,根據傳遞的引數可以通過switch 你也可以是if,或者是使用高階的反射 來進行物件的建立。工廠方法 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。工廠方法使乙個類的例項化延遲到其子類。區別 簡單工廠的優點是工廠類中...

Java設計模式 工廠方法

定義乙個用於建立物件的介面,factory method將乙個類的例項化延遲到了子類。工廠方法模式的功能 工廠方法的主要功能是讓父類在不知道具體實現的情況下,完成自身的功能呼叫,而具體的實現延遲到子類來實現。實現成抽象類 工廠方法的實現中,通常父類會是乙個抽象類,裡面包含建立所需物件的抽象方法,這些...