工厂模式
核心本质 :实例化对象不使用new,使用工厂方法代替。
将调用者和我们的实现类进行解耦。
三种模式
- 简单工厂
- 工厂方法
- 抽象工厂
简单工厂
public interface Car {
//实现跑的功能
void name();
}
public class Tesla implements Car {
@Override
public void name() {
System.out.println("我是特斯拉,贵是我的强项");
}
}
public class Wuling implements Car {
@Override
public void name() {
System.out.println("我是秋名山车神五菱宏光");
}
}
实现的方法
常规,不仅要了解接口,还要了解有哪几个类
Car car = new Wuling();
工厂方法,不用关注里面的相关细节参数。
public class CarFactory {
public static Car getCar(String str){
if ("五菱".equals(str)){
return new Wuling();
}else if ("特斯拉".equals(str)){
return new Tesla();
}
return null;
}
}
Car car = CarFactory.getCar("五零")
图示
缺点
当新添加一个类的时候,需要在类的工厂进行响应的实现。
工厂方法模式
使用工厂方法模式可以解决开闭原则的问题,之前每次增加一个实现类需要在工厂中进行修改。每个种类的车都有一个自己的车工厂。
public interface CarFactory {
Car getCar();
}
public class WulingFactory implements CarFactory {
@Override
public Car getCar() {
return new Wuling();
}
}
获得实例
Car car = new WulingFactory().getCar();
新增一个车,需要添加两个类,一个车的类,还有一个实现车工厂的类,可以满足开闭原则
对比
抽象工厂模式
生产工厂的工厂
抽象工厂关注的是一个族,生产出来的工厂能够实现该产品族的任意一个产品等级。
消费之只需要面向小米工厂或者华为工厂进行操作。