工厂模式
实现了创建者和调用者的分离
分类
简单工厂模式
用来生成同一等级结构中的任意产品(对于增加新的产品,需要修改已有的代码)
工厂方法模式
用来生成同一等级结构中的固定产品(支持增加任意产品)
抽象工厂模式
用来生成不同产品族的全部产品(对于增加新的产品,无能为力,支持增加产品族)
面向对象设计的基本原则
OCP开闭原则:一个软件的试题应当对扩展开放,对修改关闭
DIP依赖倒转原则:要针对接口编程,不要针对实现编程
LOD迪米特法则:至于你直接的朋友通信,而避免和陌生人通信
核心本质是
实例化对象,用工厂方法代替new操作
将选择实现类。创建爱你对象统一管理和控制,从而将调用者跟我们的
实现类解耦
简单工厂模式:
要点:简单工厂模式也叫静态工厂模式,就是工厂类一般都是用
静态的方法,通过接收的参数的不同返回不同的对象实例
对于增加的新产品无能为力
//或者是一个接口
public abstract class Operation {
public abstract float getResult(float firstNumber, float secondNumber);
}
//把符号都当做对象处理,实现此接口
public class AddOperation extends Operation {
@Override
public float getResult(float firstNumber, float secondNumber) {
return firstNumber+secondNumber;
}
}
public class SubOperation extends Operation {
@Override
public float getResult(float firstNumber, float secondNumber) {
return firstNumber-secondNumber;
}
}
.......还有很多一些类
//接下来需要解决的就是对象的创建问题了,既如何根据不同的情况创建不同的对象:我们正好可以通过简单工厂模式实现
//工厂,来实例化和返回指定的对象
public class OperationFactory {
public static Operation getOperation(String quotaFlag){
Operation o = null;
switch (quotaFlag){
case "+" : o = new AddOperation();
case "-" : o = new SubOperation();
case "*" : o = new MulOperation();
case "/" : o = new DivOperation();
default:break;
}
return o;
}
}
OperationFactory.getOperation();//传一个值
或者在工厂类中定义多个静态的方法用于返回特定的对象
工厂方法模式
要点:为了避免简单工厂模式的缺点,不完全满足OCP
工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于
一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类
一个产品的接口一个工厂的接口
下面实现了多组产品类和工厂类
一个产品类对应一个工厂类
每增加换一个产品就只需要增加对应该的实现工厂即可,但是还是比较复杂,
不建议使用