简单工厂模式
- 首先创建一些交通工具实体类,如图所示的Car,Trian,Airplane
- 让这些实体类继承Moveable的接口,实现Moveable接口的run()方法。因为多态的好处,继承接口之后我们在工厂中就不需要返回具体的实体类对象,返回值的类型为Moveable就可接收实现了Moveable接口的所有类。
- 创建抽象工厂VehicleFactory,创建抽象方法creat()方法,在这个这个抽象工厂是做什么不管,由继承它的子类来决定
- 创建继承VehicleFactory的具体工厂,实现creat()方法,产生具体的对象。
public class Test {
public static void main(String[] args) {
// 当我们不想使用创建飞机的工厂时只需要创建生产其他交通工具的工厂,下面的代码就不需要改变
VehicleFactory factory = new AirplaneFactory();
Moveable moveable = factory.creat();
moveable.run();
}
}
缺点
针对每一个实体类都产生了一个工厂,当实体类很多的时候就会产生工厂爆炸,不利于维护。
抽象工厂模式
- 这样我们六个实体类,只有三个具体的生产工厂。大大减少了工厂的数量
- 而每一个工厂,生产了一个交通工具与对应的司机。也就相当于三个工厂分别提供了一套自己的解决方案
- 当我们想换其他的解决方案时,只需要更换工厂
public class Test {
public static void main(String[] args) {
//可更换其他工厂,其他代码不需要改变
AbstractSolutionFactory abstractFactory = new SolutionFactory1();
Driver driver = abstractFactory.creatDriver();
Moveable vehicle = abstractFactory.creatVehicle();
driver.drive();
vehicle.run();
}
}
缺点
当我们想让交通工具可以战斗,我们要给抽象工厂添加产生武器的功能,这样所有继承这个抽象工厂的类都要变。如果这个抽象类很靠近顶层,这样我们的改动量就会无形中变大了