工厂方法模式(Factory Pattern)
工廠方法模式(定義一個創(chuàng)建對象的接口,讓其子類自己決定實(shí)例化哪一個工廠類,工廠模式使其創(chuàng)建過程延遲到子類進(jìn)行)
工廠方法模式是對簡單工廠模式的進(jìn)一步抽象化,可以使系統(tǒng)在不修改原來代碼的情況下引進(jìn)新的產(chǎn)品,滿足開閉原則。
-
優(yōu)點(diǎn):
1、用戶只需要知道具體工廠的名稱就可得到所要的產(chǎn)品,無須知道產(chǎn)品的具體創(chuàng)建過程。
2、擴(kuò)展性高,如果想增加一個產(chǎn)品,只要擴(kuò)展一個工廠類就可以。
3、典型的解耦框架。高層模塊只需要知道產(chǎn)品的抽象類,無須關(guān)心其他實(shí)現(xiàn)類,滿足迪米特法則、依賴倒置原則和里氏替換原則。 -
缺點(diǎn):
1、每次增加一個產(chǎn)品時,都需要增加一個具體產(chǎn)品類和具體工廠類,使得系統(tǒng)中類的個數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度
2、抽象產(chǎn)品只能生產(chǎn)一種產(chǎn)品,此弊端可使用抽象工廠模式解決 -
例子:以工廠生產(chǎn)華為手機(jī)和蘋果手機(jī)為例,類圖如下:
-
工廠方法模式的主要角色如下
抽象工廠(Abstract Factory):提供創(chuàng)建實(shí)體對象的接口。
具體工廠(Concrete Factory):實(shí)現(xiàn)抽象工廠中創(chuàng)建實(shí)體對象的接口。
抽象產(chǎn)品(Abstract Product):為具體產(chǎn)品提供公共接口。
具體產(chǎn)品(Concrete Product):實(shí)現(xiàn)抽象產(chǎn)品所定義的接口,由具體工廠來創(chuàng)建,和具體工廠相對應(yīng)。 -
代碼實(shí)現(xiàn)如下
抽象工廠
/*** 抽象工廠*/ public interface Factory {// 生產(chǎn)手機(jī)Phone produce(); }具體工廠
/*** 華為工廠*/ public class HuaweiFactory implements Factory {@Overridepublic Phone produce() {System.out.println("新華為手機(jī)");return new HuaweiPhone();} } /*** 蘋果工廠*/ public class AppleFactory implements Factory {@Overridepublic Phone produce() {System.out.println("新蘋果手機(jī)");return new ApplePhone();} }抽象產(chǎn)品
/*** 手機(jī)*/ public interface Phone {// 打電話void call(); }具體產(chǎn)品
/*** 華為手機(jī)*/ public class HuaweiPhone implements Phone {@Overridepublic void call() {System.out.println("用華為手機(jī)打電話...");} } /*** 蘋果手機(jī)*/ public class ApplePhone implements Phone {@Overridepublic void call() {System.out.println("用蘋果手機(jī)打電話...");} }測試
public class Test {public static void main(String[] args) {Factory huaweiFactory = new HuaweiFactory();Phone huaweiPhone = huaweiFactory.produce();huaweiPhone.call();Factory appleFactory = new AppleFactory();Phone applePhone = appleFactory.produce();applePhone.call();} } // 運(yùn)行結(jié)果 新華為手機(jī) 用華為手機(jī)打電話... 新蘋果手機(jī) 用蘋果手機(jī)打電話...總結(jié)
以上是生活随笔為你收集整理的工厂方法模式(Factory Pattern)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 醒一醒,讲到 ZooKeeper 的选举
- 下一篇: PHP常用cms