工厂模式
作用:实现了创建者和调用者的分离
分类:
1、简单工厂模式
2、工厂方法模式
3、抽象工厂模式
工厂模式应遵从的原则:
1、OCP(开闭原则,Open-Closed Principle):对于扩展开放,对于修改关闭
2、DIP(依赖倒置原则,Dependence Inversion Principle):依赖抽象,而不依赖具体,即对接口编程,而不是对实现编程
3、LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信,即尽量降低类之间的耦合程度
核心本质:
1、实例化对象,用工厂方法代替new操作
2、将选择实现类、创建对象统一管理和控制,从而实现了调用者和创建者的解耦
**简单工厂模式:**简单工厂模式也叫作静态工厂模式,就是工厂类一般使用静态方法,通过接收参数的不同来返回不同的实例对象,只有通过修改代码,才能增加新产品,即违反了OCP原则
简单工厂模式的两种实现方式:
/**
* @author ZLEI
* @Title
* @Description
* @date 2019-07-26 21:22
*/
public class createCar {
public static Car createCar(String type)
{
//简单工厂模式可能违反了OCP原则
if("奥迪".equals(type))
return new Audi();
else if("比亚迪".equals(type))
return new Byd();
else return null;
}
}
/**
* @author ZLEI
* @Title
* @Description
* @date 2019-07-26 21:35
*
* 简单工厂类的另一种实现方式
*
*/
public class ctreateCar02 {
public static Car createAudi()
{
return new Audi();
}
public static Car createByd()
{
return new Byd();
}
**工厂方法模式:**不通过一个工厂类来创建对象实例,而是通过一组继承了相同接口的工厂类来实现
/**
* @author ZLEI
* @Title
* @Description
* @date 2019-07-26 21:42
*/
public class AudiFactory implements CreateFactory {
@Override
public Car createCar() {
return new Audi();
}
}
/**
* @author ZLEI
* @Title
* @Description
* @date 2019-07-26 21:42
*/
public class BydFactory implements CreateFactory {
@Override
public Car createCar() {
return new Byd();
}
}
这样做的目的是当增加新的产品时,不需改变原有的代码,只需增加一个新的工厂类即可实现,这样就遵守了OCP原则
抽象工厂模式:
用来生产不同产品族的全部产品。(对于增加新的产品,无能为力; 支持增加产品族) – 抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务 分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。