工厂方法模式
一个抽象的父类定义公共接口,设计工厂的生产规范,不同的子类实现工厂接口,生成具体的对象,每个生产的对象也是父类定义对象的具体实现。
这样做的目的是将类的实例化操作延迟到子类中完成,按照通用父类引用,运行时决定具体的使用过程。
工厂方法结构图:
编者按:
1、简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。只需告知工厂要什么;
2、工厂方法模式实现,在于工厂类中定义了产品的实现标准,客户端的使用,只需按需动态化的选择对应的工厂,不需要考虑具体的产品细节,选定的工厂自主的去通用实现具体产品,细节由工厂来完成,去除客户端和具体产品的依赖。只需选择对应的工厂。
3、两者比较,简单工厂选择产品, 工厂方法选择产品工厂。进步之处在于,同类标准新产品的实现,不需要在原来的工厂类改造,只需实现父类标准,产生新的产品,开闭原则。
代码实现用例图:
具体代码实现:
抽象工厂:
public interface VehicleFactory {
Vehicle createVehicle();
}
抽象产品:
public interface Vehicle {
void run();
}
汽车工厂:
public class CarFactory implements VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Car();
}
}
飞机工厂:
public class AirplaneFactory implements VehicleFactory {
@Override
public Vehicle createVehicle() {
return new Airplane();
}
}
汽车产品类:
public class Car implements Vehicle {
@Override
public void run() {
System.out.println("乘坐汽车出行");
}
}
飞机产品类:
public class Airplane implements Vehicle {
@Override
public void run() {
System.out.println("乘坐飞机出行");
}
}
客户端调用:
public class Main {
public static void main(String[] args) {
Vehicle vehicle;
VehicleFactory vehicleFactory;
vehicleFactory = new AirplaneFactory();
vehicle = vehicleFactory.createVehicle();
vehicle.run();
vehicleFactory = new CarFactory();
vehicle = vehicleFactory.createVehicle();
vehicle.run();
}
}
实现结果:
乘坐飞机出行
乘坐汽车出行
关注公众号,获取更多资源。