前言:
工厂方法模式也属于类的创建模式,也被称为多态工厂模式,它与简单工厂模式的不同是,工厂定义为抽象的,工厂的每个子类负责创建具体的实体类。这样的好处是,增加新的实体,只需要增加相应的工厂就可以了,不需要修改原工厂代码。
怎么实现:
1、需要实体类:要被创建的类
2、被创建的类的共同父类:多态的体现,负责所有实例的公共接口,在工厂类中接受实体对象
3、抽象工厂类:所有工厂类的父类
4、工厂类:创建实体类,继承抽象工厂类,多态的体现
代码:
水果类父类:
package com.xhx.designpattern; public interface Fruit { /** * 水果 */ void get(); }
苹果类:
package com.xhx.designpattern; public class Apple implements Fruit{ public void get(){ System.out.println("我是苹果"); } }
香蕉类:
package com.xhx.designpattern; public class Banana implements Fruit{ public void get(){ System.out.println("我是香蕉"); } }
工厂类父类:
package com.xhx.designpattern; public interface FruitFactory { Fruit getFruit(); }
苹果工厂:
package com.xhx.designpattern; public class AppleFactory implements FruitFactory { @Override public Fruit getFruit() { return new Apple(); } }
香蕉工厂:
package com.xhx.designpattern; public class BananaFactory implements FruitFactory { @Override public Fruit getFruit() { return new Banana(); } }
启动测试类:
package com.xhx.designpattern; public class App { /** * 简单工厂模式,增加新类一般都需要修改原来的工厂 * 工厂方法模式把工厂定义为接口,增加新类同样增加具体工厂类 * @param args */ public static void main( String[] args ) { //获得AppleFactory FruitFactory fruitFactory = new AppleFactory(); Fruit apple = fruitFactory.getFruit(); apple.get(); //获得BananaFactory FruitFactory fruitFactory1 = new BananaFactory(); Fruit banana = fruitFactory1.getFruit(); banana.get(); } }
增加新类:
package com.xhx.designpattern; public class Pear implements Fruit { @Override public void get() { System.out.println("我是梨子"); } }
增加新类工厂:
package com.xhx.designpattern; public class PearFactory implements FruitFactory { @Override public Fruit getFruit() { return new Pear(); } }