工厂模式 实现了创建者和调用者的分离 分类 简单工厂模式 用来生成同一等级结构中的任意产品(对于增加新的产品,需要修改已有的代码) 工厂方法模式 用来生成同一等级结构中的固定产品(支持增加任意产品) 抽象工厂模式 用来生成不同产品族的全部产品(对于增加新的产品,无能为力,支持增加产品族) 面向对象设计的基本原则 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 工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于 一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类 一个产品的接口一个工厂的接口 下面实现了多组产品类和工厂类 一个产品类对应一个工厂类 每增加换一个产品就只需要增加对应该的实现工厂即可,但是还是比较复杂, 不建议使用