简单工厂模式不是23种设计模式,更像是一种编程习惯。
简单工厂主要包括以下角色:
- 抽象产品:定义了产品的规范,描述了产品的主要特性和功能
- 具体产品:实现或继承抽象产品的子类
- 具体工厂:提供了创建产品的方法,调用者通过该方法来获取产品
抽象产品(咖啡接口)
public interface Coffee{
String getName();
void addMilk();
void addSugar();
}
具体产品(美式咖啡)
public class AmericanCoffee implements Coffee{
}
具体产品(拿铁咖啡)
public class LatteCoffee implements Coffee{
}
具体工厂
public class SimpleCoffeeFactory{
public Coffee createCoffee(String type){
Coffee coffee;
if(type.equlas("A")){
coffee = new AmericanCoffee();
}else{
coffee = new LatteCoffee();
}
return coffee;
}
}
在开发中也有一部分人将工厂类中的创建对象的功能定义为静态的,这个就是静态工厂模式,它也不是23种设计模式中的。
静态工厂类
public class StaticCoffeeFactory{
public static Coffee createCoffee(String type){
Coffee coffee;
if(type.equals("A")){
coffee = new AmericanCoffee();
}else{
coffee = new LatteCoffee();
}
return coffee;
}
}
优点:
封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑分开,这样以后就避免了修改客户代码。如果要实现新产品直接修改工厂类,降低了客户代码修改的可能性,更容易扩展。
缺点:增加新产品时还是需要修改工厂类,违反了开闭原则
。