定义: 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 便可,不用再从新修改旧的代码!
优势
一、 在工厂方法中,用户只须要知道所要产品的具体工厂,无须关系具体的建立过程,甚至不须要具体产品类的类名。
二、 在系统增长新的产品时,咱们只须要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。
缺点
一、 每次增长一个产品时,都须要增长一个具体类和对象实现工厂,系统中类的个数成倍增长,在必定程度上增长了系统的复杂度,同时也增长了系统具体类的依赖。这并非什么好事。