简介
工厂方法模式(Factory Method Pattern)又称为工厂模式,在工厂方法模式中,工厂父类定义创建产品对象的公共接口,具体的工厂子类负责创建具体的产品对象。每一个工厂子类负责创建一种具体产品。
实现
抽象产品类:所有需要创建产品的基类,是个纯虚类
具体产品类:继承抽象产品,是根据需要添加的功能产品
抽象工厂类:工厂类接口,所有具体工厂类的基类
具体工厂类:负责生产具体产品
Car为抽象产品类 BenzCar、BMWCar、AudiCar为具体产品类 CarFactory为 抽象工厂类,BMWCarFactory、AudiCarFactory、BenzCarFactory为具体工厂类
代码示例
public interface CarFactory {
Car createCar();
}
public class BenzCarFactory implements CarFactory {
public Car createCar() {
return new BenzCar();
}
}
public class BMWCarFactory implements CarFactory{
public Car createCar() {
return new BMWCar();
}
}
public class AudiCarFactory implements CarFactory {
public Car createCar() {
return new AudiCar();
}
}
public interface Car {
void drive();
}
public class AudiCar implements Car {
public void drive() {
System.out.println("AudiCar run");
}
}
public class BenzCar implements Car {
public void drive() {
System.out.println("BenzCar run");
}
}
public class BMWCar implements Car {
public void drive() {
System.out.println("BMWCar run");
}
}
/**
* @author: xuqiangnj@163.com
* @date: 2019/4/21 21:54
* @description: 测试类
*/
public class TestCar {
public static void main(String[] args) {
CarFactory carFactory = new BenzCarFactory();
Car car = carFactory.createCar();
car.drive();
carFactory = new BMWCarFactory();
car = carFactory.createCar();
car.drive();
carFactory = new AudiCarFactory();
car = carFactory.createCar();
car.drive();
}
}
运行结果
总结
工厂模式弥补了简单工厂模式的缺点,大大增加了易用性和扩展性,每个工厂只负责生产特定的产品,在工厂类中没有判断的逻辑,唯一的职责就是生产产品,符合单一职责原则,工厂模式新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可,无需修改工厂类,而简单工厂模式需要修改判断逻辑,所以工厂模式符合开-闭原则。