思想
简单工厂,也称为静态工厂模式,包含如下角色:
- 抽象产品 :定义了产品的规范,描述了产品的主要特性和功能
- 具体产品 :实现或者继承抽象产品的子类
- 具体工厂 :提供了创建产品的方法,调用者通过该方法来获取产品
代码实现
//抽象产品
public abstract class Coffee {
public abstract String getName();
}
//具体产品
public class AmericanCoffee extends Coffee {
public String getName() {
return "美式咖啡";
}
}
public class LatteCoffee extends Coffee {
public String getName() {
return "拿铁咖啡";
}
}
//具体工厂 createCoffee方法为静态方法
public class SimpleCoffeeFactory {
public static Coffee createCoffee(String type) {
//声明Coffee类型的变量,根据不同类型创建不同的coffee子类对象
Coffee coffee = null;
if("american".equals(type)) {
coffee = new AmericanCoffee();
} else if("latte".equals(type)) {
coffee = new LatteCoffee();
} else {
throw new RuntimeException("对不起,您所点的咖啡没有");
}
return coffee;
}
}
优点与缺点
优点:
- 封装了创建对象的过程,可以通过参数直接获取对象。
- 把对象的创建和业务逻辑层分开,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,扩展性高
缺点:
- 实现新产品需要修改 SimpleCoffeeFactory 的代码,违反了开闭原则。
开闭原则
对扩展开放,对修改关闭,在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果,简言之,是为了使程序的扩展性好,易于维护和升级,使用接口和抽象类。
抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定,软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以。