Use Case:
顾客在在麦当劳购买食品。
顾客对服务员说, 来一个鸡翅,服务员就给顾客一个鸡翅。
顾客对服务员说,来一个汉堡,服务员就给顾客一个汉堡。
Simple Factory和普通实现方案比较:
1/ 顾客直接依赖鸡翅,汉堡。
2/ 顾客依赖服务员。
package creational.simplefactory;
public interface Product {
}
package creational.simplefactory;
public class ConcreteProductA implements Product {
}
package creational.simplefactory;
public class ConcreteProductB implements Product {
}
package creational.simplefactory;
public class SimpleFactory {
public static Product createProduct(String food) {
if (food.equals("ConcreteProductA")) {
return new ConcreteProductA();
} else if (food.equals("ConcreteProductB")) {
return new ConcreteProductB();
} else {
}
return null;
}
}
效果:
运行期错误 VS. 编译型错误。
一种可变性应当被封装到一个对象里面,而不应当散落到代码的很多角落里。
但是不符合OCP原则 !