工厂方法模式
工厂方法模式,对简单工厂模式进行了升级。我们将水果园比作一个工厂,在简单工厂模式下,水果园是一个具体的工厂,直接用来生产各种各样的水果。那么在工厂方法模式下,水果园是一个抽象工厂,那么苹果树,香蕉树等就相当于是具体工厂,生产苹果、香蕉等水果。每有一种新的水果要生产,则需要种植生产这种水果植物,即创建生产具体水果的工厂。
1.相关术语
-
抽象工厂:工厂方法模式的核心,任何的工厂类需实现这个接口
-
具体工厂:实现抽象的工厂接口,生产产品,即实例化相应的对象
2.工厂方法模式示意图
3.创建Fruit接口、Apple类等
Fruit(interface):
//水果类 public interface Fruit { public void get(); }
Apple类:
//苹果类 public class Apple implements Fruit{ //实现并重写父类的get()方法 public void get() { System.out.println("采集苹果"); } }
4.创建FruitFactory接口、AppleFactory类等
FruitFactory(interface):
public interface FruitFactory { public Fruit getFruit(); }
AppleFactory类:
public class AppleFactory implements FruitFactory { @Override public Fruit getFruit() { return new Apple(); } }
5.生产水果
MainClass:
public class MainClass { public static void main(String[] args){ //创建苹果工厂 FruitFactory appleFactory = new AppleFactory(); //通过苹果工厂生产苹果实例 Fruit apple = appleFactory.getFruit(); apple.get(); //创建香蕉工厂 FruitFactory bananaFactory = new BananaFactory(); //通过香蕉工厂生产香蕉实例 Fruit banana = bananaFactory.getFruit(); banana.get(); //新添加的梨子工厂 FruitFactory pearFactory = new PearFactory(); Fruit pear = pearFactory.getFruit(); pear.get(); } }
这里用到Java面向对象的三大特性之一--多态。在新建工厂时,由FruitFactory接口指向具体的工厂(AppleFactory)。通过具体的工厂生产水果时,由Fruit接口指向具体的实例对象(Apple)。
7.总结