简单工厂
简单工厂 就是指由一个工厂对象决定创建出哪一种产品的实例
属于创建型工厂 但是不属于23种设计模式
/**
* 只关注创建
*/
public class CouseFactory {
// public static AbstractCouse createCouse(String name) throws Exception {
// if ("java".equals(name)) {
// return new JavaCouse();
// } else if ("python".equals(name)) {
// return new PythonCouse();
// } else {
// throw new Exception();
// }
// }
public static AbstractCouse createCouse(Class<? extends AbstractCouse> clazz) {
try {
if (null != clazz) {
return clazz.newInstance();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
简单工厂是试用场景 : 工厂类负责创建的对象较少 我只需要关注传入工厂类的参数,对于如何创建对象的逻辑不需要关心
优点: 只需要传递一个参数 就可以获取到需要的对象 对如何创建对象不用关注
缺点: 工厂类的职责相对过重,增加新的类时 需要修改工厂类的判断逻辑 违背了开闭原则
不利于扩展过于复杂的产品结构
工厂方法模式:
工厂方法模式是指:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 属于创建型设计模式
优点: 用户只关心所需产品对应的工厂,无需关心创建细节 加入新类符合开闭原则,提高的系统的 可拓展性
缺点: 类的数量容易过多,增加了代码结构的复杂度 增加了系统的抽象性和理解难度
抽象工厂模式
抽象工厂模式是指 提供一个创建一系列相关接口或者相互依赖对象的接口,无需指定他们具体的类
属于创建新设计模式
缺点: 规定了所有可能被创建的产品集合,产品族中扩展新产品困难,需要修改抽象工厂的接口 增加了系统的难度
优点: 具体产品在应用层代码隔离,无需关心创建细节,将一系列的产品族统一到一起创建