跟着《软件秘笈---设计模式那点事》学习
定义:
工厂方法模式(Factory Method Pattern)
定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将创建实例对象的工作推迟到子类当中,核心工厂类不在负责具体产品的创建。
工厂方法模式是对简单工厂模式进行了抽象。如此一来核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这一样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改工厂角色的情况下引进新的产品,工厂方法模式完全实现“开-闭”原则,对扩展开房,对修改关闭。
角色:
- 抽象工厂
- 抽象产品
- 具体工厂
- 具体产品
类图:
实例:
/*
* 抽象产品
* */
public abstract class AbstractSword {
private String name;
// 抽象父类构造方法
public AbstractSword() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/*
* 抽象工厂
* */
public interface ISwordFactory {
//返回各种宝刀(返回值是抽象宝刀类型)
public AbstractSword createSword();
}
/*
* 具体产品
* */
public class QixingSword extends AbstractSword {
public QixingSword() {
this.setName("七星宝刀");
}
}
/*
* 具体工厂
* */
public class Caocao implements ISwordFactory {
@Override
public AbstractSword createSword() {
return new QixingSword();
}
}
/*
* 客户端
* */
public class MainApp {
public static void main(String[] args) {
//创建曹操实例对象(返回使用接口类型 ISwordFactory)
ISwordFactory swordFactory = new Caocao();
//获得宝刀实例-----------七星宝刀
AbstractSword sword = swordFactory.createSword();
//刺杀董卓
System.out.println("曹操使用" + sword.getName() + "刺杀董卓!");
}
}
使用场合:
当子类型可能会有很多,以后需要不断增添不同的子类实现时。
一句话总结:
用继承的方式实现解耦。