简单工厂不是一种设计模式,反而比较像是一种编程习惯。
简单工厂包含如下角色:
- 抽象产品 :定义了产品的规范,描述了产品的主要特性和功能。
- 具体产品 :实现或者继承抽象产品的子类
- 具体工厂 :提供了创建产品的方法,调用者通过该方法来获取产品。
抽象产品:咖啡
public abstract class Coffee {
public abstract String getName();
public void addSugar() {
System.out.println("加糖");
}
public void addMilk() {
System.out.println("加奶");
}
}
具体产品:美式咖啡和拿铁咖啡
public class AmericanCoffee extends Coffee {
@Override
public String getName() {
return "美式咖啡";
}
}
public class LatteCoffee extends Coffee {
@Override
public String getName() {
return "拿铁咖啡";
}
}
具体工厂:生产咖啡的工厂
public class SimpleCoffeeFactory {
public Coffee createCoffee(String type) {
Coffee coffee = null;
if ("american".equals(type)) {
coffee = new AmericanCoffee();
} else if ("latte".equals(type)) {
coffee = new LatteCoffee();
}
return coffee;
}
}
通过咖啡店点咖啡:
public class CoffeeStore {
public Coffee orderCoffee(String type) {
SimpleCoffeeFactory factory = new SimpleCoffeeFactory();
Coffee coffee = factory.createCoffee(type);
coffee.addSugar();
coffee.addMilk();
return coffee;
}
}
生产咖啡的工厂处理创建对象的细节,解除了咖啡店和具体咖啡之间的耦合,同时又产生了新的耦合:咖啡店和咖啡工厂之间的耦合以及咖啡工厂和具体咖啡的耦合。
增加新产品时需要修改工厂类的代码,违背了“开闭原则”。



