⼯⼚⽅法、抽象⼯⼚都属于创建者模式。
⼯⼚模式
实现了创建者和调用者的分离。
工厂(Factory)模式遵循原则——开闭原则,依赖倒转原则,迪米特法则
核心本质:实例化对象不使用new,用工厂方法代替。将选择实现类,创建对象统一管理和控制,将调用者和实现类解耦。
简单(静态)工厂
生产同一等级结构中的任意产品。需要扩展原先的代码。
将之前的new xx,写入到一个工厂类中,不必关心new的过程,只需要写入类型,得到对象就行。
public class CarFactory{
// 方法一,但是会违反开闭原则
public static Car getCar(String car){
if(car.equal("xx")){
return new XX(); // XX是Car接口的实现类
}
}
// 方法二
public static Car getXX(){ return new XX(); }
}
// Car car = new XX();
Car car = CarFactory.getCar("xx");
工厂方法
生产同一等级结构中的固定产品,支持添加任意产品。
// 定义工厂方法接口
public interface CarFactory(){
Car getCar(); // 构建接口抽象方法。
}
// 定义每一个车的工厂方法
public class XXFactory implements CarFartory{
@Override // 重写
public Car getCar(){
return new XX();
}
}
// new 一个工厂
// new一个车等于自己造一个车,new一个工厂等于去4s店
Car car = new XXFactory.getCar();
抽象工厂模式
超级工厂,创建工厂。创建一系列相关或者相互依赖对象的接口,无需指定具体的类,即无需关心细节。工厂的工厂,创建出产品族。
例子:
手机接口+路由器接口
华为手机实现类+小米手机实现类
华为路由器实现类+华为路由器实现类
抽象工厂接口
华为工厂实现类:生产华为手机+华为路由器,new 实现类
小米工厂实现类:生产小米手机+小米路由器
结构图: