定義: java
工廠方法模式是簡單工廠模式的延伸。在工廠方法模式中,核心工廠類不在負責產品的建立,而是將具體的建立工做交給子類去完成。也就是後所這個核心工廠僅僅只是提供建立的接口,具體實現方法交給繼承它的子類去完成。當咱們的系統須要增長其餘新的對象時,咱們只須要添加一個具體的產品和它的建立工廠便可,不須要對原工廠進行任何修改,這樣很好地符合了「開閉原則」。app
示例代碼:ide
Fruit.javaui
package com.designPattern.factoryMethod; /*** * * @author liuzhihu * */ public interface Fruit { /*** * 定義吃水果的方法 */ public void eatFruit(); }
Apple.java對象
package com.designPattern.factoryMethod; /*** * * @author liuzhihu * */ public class Apple implements Fruit { @Override public void eatFruit() { System.out.println("吃蘋果 ......"); } }
Banana.javablog
package com.designPattern.factoryMethod; /*** * * @author liuzhihu * */ public class Banana implements Fruit { @Override public void eatFruit() { System.out.println("吃香蕉 ......"); } }
FruitFactory.java繼承
package com.designPattern.factoryMethod; public abstract class FruitFactory { /*** * 採集水果 * * @param type * @return */ public abstract Fruit getFruit(); }
AppleFactory.java接口
package com.designPattern.factoryMethod; public class AppleFactory extends FruitFactory { @Override public Fruit getFruit() { System.out.println("採摘蘋果"); return new Apple(); } }
BananaFactory.javaget
package com.designPattern.factoryMethod; public class BananaFactory extends FruitFactory { @Override public Fruit getFruit() { System.out.println("採摘香蕉"); return new Banana(); } }
MainTest.java產品
package com.designPattern.factoryMethod; /*** * 工廠方法模式 * * @author liuzhihu * */ public class MainTest { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { AppleFactory appleFactory = new AppleFactory(); Fruit apple = appleFactory.getFruit(); apple.eatFruit(); BananaFactory bananaFactory = new BananaFactory(); Fruit banana = bananaFactory.getFruit(); banana.eatFruit(); } }
以上代碼,若是想要再添加一種水果,那麼實現一下Fruit.java與FruitFactory.java 便可,不用再從新修改舊的代碼!
優勢
一、 在工廠方法中,用戶只須要知道所要產品的具體工廠,無須關係具體的建立過程,甚至不須要具體產品類的類名。
二、 在系統增長新的產品時,咱們只須要添加一個具體產品類和對應的實現工廠,無需對原工廠進行任何修改,很好地符合了「開閉原則」。
缺點
一、 每次增長一個產品時,都須要增長一個具體類和對象實現工廠,系統中類的個數成倍增長,在必定程度上增長了系統的複雜度,同時也增長了系統具體類的依賴。這並非什麼好事。