炒冷飯系列:設計模式 工廠方法模式

炒冷飯系列:設計模式 工廠方法模式

摘要: 摘要: 原創出處: http://www.cnblogs.com/Alandre/ 泥沙磚瓦漿木匠 但願轉載,保留摘要,謝謝!html

事雖險,吾善爲;苟擅爲,子道虧。物雖小,勿私藏;苟私藏,親心傷。

1、什麼是工廠方法模式java

2、模式中包含的角色及其職責設計模式

三.工廠方法模式實現app

4、工廠方法模式和簡單工廠模式比較ide

1、什麼是工廠方法模式

工廠方法模式一樣屬於類的建立型模式又被稱 爲多態工廠模式 。工廠方法模式的意義是定義一個建立 產品對象的工廠接口,將實際建立工做推遲到子類當中。 核心工廠類再也不負責產品的建立,這樣核心類成爲一個 抽象工廠角色,僅負責具體工廠子類必須實現的接口, 這樣進一步抽象化的好處是使得工廠方法模式可使系 統在不修改具體工廠角色的狀況下引進新的產品。測試

2、模式中包含的角色及其職責

1.抽象工廠(Creator)角色
工廠方法模式的核心,任何工廠類都必須實現這個接口。ui

2.具體工廠( Concrete Creator)角色
具體工廠類是抽象工廠的一個實現,負責實例化產品對象。spa

3.抽象(Product)角色
工廠方法模式所建立的全部對象的父類,它負責描述全部實例所共有的公共接口。設計

4.具體產品(Concrete Product)角色
工廠方法模式所建立的具體實例對象code

注意:其實就是多出一套:定義一個建立 產品對象的工廠接口

在咱們上一篇:簡單工廠模式 實際上是  工廠方法模式 的原理。

三.工廠方法模式實現

結構圖:

                                  image

類圖UML:

  image

Fruit.java Apple.java Banana.java

複製代碼

public interface Fruit
{    /*
     * 採集     */
    public void get();
}public class Apple implements Fruit
{    /*
     * 採集     */
    public void get()
    {
        System.out.println("採集Apples");
    }
}public class Banana implements Fruit
{    /*
     *採集     */
    public void get()
    {
        System.out.println("採集Banana");
    }
}

複製代碼


FruitFactory.java AppleFactory .java BananaFactory.java

複製代碼

public interface FruitFactory
{    public Fruit getFruit(); 
}public class AppleFactory implements FruitFactory
{

    @Override    public Fruit getFruit()
    {        return new Apple();
    }

}public class BananaFactory implements FruitFactory
{    public Fruit getFruit()
    {        return new Banana();
    }

}

複製代碼

 

如今咱們來測試下:

複製代碼

public class MainClass
{    public static void main(String[] args)
    {        //得到蘋果工廠
        FruitFactory ff = new AppleFactory();        //經過AppleFactory 得到 Apple實例對象
        Fruit apple = ff.getFruit();
        apple.get();        
        //得到BananaFactory
        FruitFactory ff2 = new BananaFactory();        //經過AppleFactory 得到 Apple實例對象
        Fruit banana = ff2.getFruit();
        banana.get();

    }
}

複製代碼

運行能夠看到下面的輸出:

採集Apples
採集Banana

 

這個模式的好下面咱們來增長一種水果Pear:


PearFactory.java Pear.java

複製代碼

public class PearFactory implements FruitFactory
{    public Fruit getFruit()
    {        return new Pear();
    }

}public class Pear implements Fruit
{

    @Override    public void get()
    {
        System.out.println("採集Pears");
    }

}

複製代碼

而後測試代碼以下:

//得到BananaFactoryFruitFactory ff3 = new PearFactory();//經過AppleFactory 得到 Apple實例對象Fruit pear = ff3.getFruit();
pear.get();

測試輸出以下:

採集Apples
採集Banana
採集Pears

相關資料:

java 多態

4、工廠方法模式和簡單工廠模式比較

工廠方法模式與簡單工廠模式在結構上的不一樣不是很明顯。工廠方 法類的核心是一個抽象工廠類,而簡單工廠模式把核心放在一個具 體類上。工廠方法模式之因此有一個別名叫多態性工廠模式是由於具體工 廠類都有共同的接口,或者有共同的抽象父類。當系統擴展須要添加新的產品對象時,僅僅須要添加一個具體對 象以及一個具體工廠對象,原有工廠對象不須要進行任何修改,也 不須要修改客

戶端,很好的符合了「開放-封閉」原則OCP。而簡單工廠 模式在添加新產品對象後不得不修改工廠方法,擴展性很差。工廠方法模式退化後能夠演變成簡單工廠模式

五 感謝知識來源和小結

1、什麼是工廠方法模式

2、模式中包含的角色及其職責

三.工廠方法模式實現

4、工廠方法模式和簡單工廠模式比較

來自:java設計模式

如以上文章或連接對你有幫助的話,別忘了在文章按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章。

親所好,力爲具;親所惡,謹爲去。身有傷,貽親憂;德有傷,貽親羞。
相關文章
相關標籤/搜索