设计模式之工厂方法模式
设计模式之工厂方法模式
(一)什么是工厂方法模式
工厂方法模式也称为多态工厂模式,也是对象的创建模式。定义了一个创建产品对象的工厂接口或抽象类,将实际创建工作推迟到它的实现类或子类当中。核心工厂类不再负责产品的创建,这样核心类就成为了一个抽象工厂角色,仅仅负责定义具体工厂类必须实现的借口,具体产品的创建,交给与其对应的核心工厂类的具体实现类或子类 。
(二)工厂方法模式中的角色
1. 抽象工厂角色
工厂方法模式的核心,任何具体工厂类必须实现这个借口或抽象类。
2. 具体工厂角色
抽象工厂的具体实现类,负责具体产品的创建。
3. 抽象产品角色
所创建的所有对象的父类,它负责描述所有实例的共有接口。
4. 具体产品角色
工厂方法所创建的具体实例对象
(三)工厂方法模式的具体实现
1. 抽象工厂
定义了一个接口,包含一个抽象方法返回Fruit对象
public interface FruitFactory { Fruit getFurit(); }
2. 具体工厂
定义了两个具体工厂类AppleFactory和OrangeFactory,实现了抽象工厂FruitFactory接口,返回具体的产品对象
public class AppleFactory implements FruitFactory { @Override public Fruit getFurit() { return new Apple(); } } public class OrangeFactory implements FruitFactory { @Override public Fruit getFurit() { return new Orange(); } }
3. 抽象产品
定义了一个抽象产品类Fruit
public interface Fruit { void get(); }
4. 具体产品
定义了两个具体产品类Apple和Orange实现了Fruit接口
public class Apple implements Fruit { @Override public void get() { System.out.println("苹果采摘"); } } public class Orange implements Fruit { @Override public void get() { System.out.println("橘子采摘"); } }
测试:
public class Test { public static void main(String[] args) { FruitFactory appleFactory = new AppleFactory(); Fruit apple = appleFactory.getFurit(); FruitFactory orangeFactory = new OrangeFactory(); Fruit orange = orangeFactory.getFurit(); apple.get(); orange.get(); } }
(四)工厂方法模式与简单工厂模式的比较
工厂方法类的核心是一个抽象类或接口,需要具体工厂类实现这个接口,而不同具体产品对应不同的具体工厂类,用于创建对应的具体类;简单工厂模式的核心类是一个具体的类,由这个工厂类创建具体的对象。
换个角度说,工厂方法模式就是每一个具体类(这些具体类有着共同的父类)都有一个与其对应的工厂类负责创建这个类的对象,而这些工厂类实现了同一个抽象工厂接口。
当有新的具体类添加时,源代码不用修改,只需将给类实现具体类的共同父类,创建一个与该类对象的具体工厂类并实现抽象工厂方法即可。
可以演变成简单工厂模式。