一. 简单工厂模式
定义: 是指由一个工厂对象决定创建出哪一种产品类的实例,但它不属于 GOF,23 种设计模式(参考资料:
http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type)。
使用场景:
优点:实现了对象的“创建”和“使用”的分离,遵循了“单一职责原则”
缺点:工厂类的职责相对过重,不易于扩展过于复杂的产品结构
JDK例子:Calendar,Logger
代码中的类创建的反射机制:
public ICourse create(Class<? extends ICourse> clazz){
try {
if (null != clazz) {
return clazz.newInstance();
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
类图:
二. 工厂方法模式
定义:工厂方法模式(Fatory Method Pattern)是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行
使用场景:
1、创建对象需要大量重复的代码。
2、客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。
3、一个类通过其子类来指定创建哪个对象。
优点:符合开闭原则
缺点:
1、类的个数容易过多,增加复杂度。
2、增加了系统的抽象性和理解难度。
类图:
三. 抽象工厂模式
定义:抽象工厂模式(Abastract Factory Pattern)是指提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类。
使用场景:复杂产品的族和产品结构。
优点:符合单一职责
缺点:
1、规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口。
2、增加了系统的抽象性和理解难度。