设计模式-工厂模式
spring中的BeanFactory就是工厂模式
一、简单工厂模式
简单工厂模式是指一个工厂对象决定创建出哪一种产品类的实例。实现一个类,类里面有一个方法,更加传入的参数,创建对象。客户端只需要传入工厂类参数,对如何创建类不关心。
下图就是一个简单工厂的实例
Calendar.getInstance就是一个简单工厂模式
缺点:工厂类的职责相对过重,不易于扩展过于复杂的产品结构。
二、工厂方法模式
工厂方法模式是指定义一个创建对象的接口,但让实现这个接口的类觉定实例化哪个类,工厂方法让类的实例化放到子类中进行。在工厂方法模式中用户只需要关系所需产品对应的工厂,无需关注创建细节,而且加入的新的产品符合开闭原则。
简单类图
logback中工厂方法模式的应用
适用场景:一个类通过其子类来指定创建哪个对象。
缺点:
1.类的个数容易过多,增加复杂度
2.增加了系统的抽象性和理解难度
三、抽象工厂模式
抽象工厂模式是指提供一个创建一系列相关或相互依赖对象的接口,无须指定他们的具体的类。强调的是一系列相关的产品对象(同一产品族)。
举例:如果一个有n个品牌,任何一个品牌都可以生产a,b,c,d多个类型的产品。这个时候我们可以这样定义实体,a,b,c,d类型都定义一个接口或者超级类,然后每一个品牌对应实现a,b,c,d类型的类。这个时候就可以使用抽象工厂模式了,定义一个抽象工厂类接口,可以生产a,b,c,d类型的产品,这个接口和品牌无关,然后每一个品牌都定义一个工厂实现这个抽象工厂类接口,生产对应产品的a,b,c,d类型对象。