工厂模式,如果每次需要创建对象的时候都是直接new,那么会导致业务与这个对象的耦合,之后业务更改也很麻烦,违反了开闭原则,那么把对象的创建放在一个第三方的工厂对象,之后业务需要的对象就从工厂中获取,解除业务和对象之间的耦合
·简单工厂(不算在GOF23种设计模式中):
- 封装对象的创建,按照传递的参数生产不同的对象类型,但是如果有新的需求还是要修
改代码,只是修改所有业务的代码变成了修改单个工厂类的代码,所以还是违反了开闭原则
- 在创建对象的方法上使用静态修饰就是静态工厂模式,也不算在GOF23种设计模式中,方便了业务层的调用,不用去new工厂对象
·工厂方法模式:
- 把工厂生产对象的方法抽取为接口,各种的对象工厂去实现这个接口,返回产品,第三方工厂依赖于接口,调用的时候给予实现,业务需要增加的时候只需要创建新的对象生产工厂,满足开闭原则,但是每增加一个需求就要多一个生产类和产品类,增加复杂度
·抽象工厂模式:
- 当需要工厂生产多个不同类型的产品时,就可以把产品根据作用域范围定义成不同的产品族,定义一个接口规定生产的单个产品的种类(也就是产品的抽象),一个产品族可以生产多个产品,生产工厂,实现这个接口,按照产品族的不同生产不同的产品组合
- 但是当产品族需要增加一个新的产品的时候,所有的生产工厂包括接口都要修改,不符合开闭原则,所以在设定抽象工厂的时候就要考虑这个问题
·简单工厂模式+properties文件简单模拟ioc(不考虑单例和原型):
- 在properties文件中列出所有可能会使用到的产品的名称和全类名,在工厂中定义一
个静态map(value的泛型为产品的抽象,存的是实现),在静态代码块中读取properties文件的key和value,通过全类名获取字节码创建对象,存放到map,key就是properties中的key,需要获取对象的时候就传入一个产品的名称从map中取值返回即可