需求
常规思维:
这里的订单类和披萨类高度耦合。
这样写违背了OCP原则(修改关闭,扩展开放),多个订单类的情况下,如果新增披萨就要修改每个订单类的代码,耦合性很高。
简单工厂模式实现
当需要大量创建对象的时候可以使用简单工厂模式
这里加了一个简单工厂类,他可以返回任何类型的披萨,当加入新的披萨时,只需要修改简单工厂类的代码,不需要修改各种订单调用类
代码分析如下
代码如下
Pizza类:
package simplefactory;
public abstract class Pizza {
public abstract void prepare();
void bake(){
System.out.println("烘烤");
}
void cut(){
System.out.println("切");
}
void box(){
System.out.println("打包");
}
}
CheessPizza类:
package simplefactory;
public class CheessPizza extends Pizza{
@Override
public void prepare() {
System.out.println("加入奶酪");
}
}
GreekPizza类:
package simplefactory;
public class GreekPizza extends Pizza {
@Override
public void prepare() {
System.out.println("加入希腊酸奶");
}
}
SimpleFactory类
package simplefactory;
public class SimpleFactory {
public Pizza getPizza(String pizzaType){
if (pizzaType.equals("Cheess")){
return new CheessPizza();
}
if (pizzaType.equals("Greek")){
return new GreekPizza();
}
return null;
}
}
OrderPizza类
package simplefactory;
public class OrderPizza {
public OrderPizza(SimpleFactory simpleFactory,String pizzaType){
simpleFactory.getPizza(pizzaType).prepare();
simpleFactory.getPizza(pizzaType).bake();
simpleFactory.getPizza(pizzaType).cut();
}
}
Client类
package simplefactory;
public class Client {
public static void main(String[] args) {
new OrderPizza(new SimpleFactory(),"Greek");
new OrderPizza(new SimpleFactory(),"Cheess");
}
}