传统方式解决披萨制作问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传统方式解决披萨制作问题相关的知识,希望对你有一定的参考价值。
- 需求
披萨项目:要便于披萨种类的扩展,要便于维护
1) 披萨的种类很多(比如 GreekPizz、CheesePizz 等)
2) 披萨的制作有 prepare,bake, cut, box
3) 完成披萨店订购功能。
- 代码实现
package com.atguigu.factory.simplefactory.pizzastore.pizza;
//将Pizza 类做成抽象
public abstract class Pizza
protected String name; //名字
//准备原材料, 不同的披萨不一样,因此,我们做成抽象方法
public abstract void prepare();
public void bake()
System.out.println(name + " baking;");
public void cut()
System.out.println(name + " cutting;");
//打包
public void box()
System.out.println(name + " boxing;");
public void setName(String name)
this.name = name;
public class PepperPizza extends Pizza
@Override
public void prepare()
// TODO Auto-generated method stub
System.out.println(" 给胡椒披萨准备原材料 ");
public class GreekPizza extends Pizza
@Override
public void prepare()
// TODO Auto-generated method stub
System.out.println(" 给希腊披萨 准备原材料 ");
public class CheesePizza extends Pizza
@Override
public void prepare()
// TODO Auto-generated method stub
System.out.println(" 给制作奶酪披萨 准备原材料 ");
package com.atguigu.factory.simplefactory.pizzastore.order;
public class OrderPizza
// 构造器
public OrderPizza()
Pizza pizza = null;
String orderType; // 订购披萨的类型
do
orderType = getType();
if (orderType.equals("greek"))
pizza = new GreekPizza();
pizza.setName(" 希腊披萨 ");
else if (orderType.equals("cheese"))
pizza = new CheesePizza();
pizza.setName(" 奶酪披萨 ");
else if (orderType.equals("pepper"))
pizza = new PepperPizza();
pizza.setName("胡椒披萨");
else
break;
//输出pizza 制作过程
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
while (true);
// 写一个方法,可以获取客户希望订购的披萨种类
private String getType()
try
BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input pizza 种类:");
String str = strin.readLine();
return str;
catch (IOException e)
e.printStackTrace();
return "";
package com.atguigu.factory.simplefactory.pizzastore.order;
//相当于一个客户端,发出订购
public class PizzaStore
public static void main(String[] args)
// TODO Auto-generated method stub
new OrderPizza();
- 当我们新增1种披萨的时候,会比较复杂
- 传统的方式的优缺点
1) 优点是比较好理解,简单易操作。
2) 缺点是违反了设计模式的ocp原则,即对扩展开放,对修改关闭。即当我们给类增加新功能的时候,尽量不修改代码,或者尽可能少修改代码.
3) 比如我们这时要新增加一个Pizza的种类(Pepper披萨),我们需要做如下修改
4) 改进的思路分析
分析:修改代码可以接受,但是如果我们在其它的地方也有创建Pizza的代码,就意味着,也需要修改,而创建Pizza的代码,往往有多处。
思路:把创建Pizza对象封装到一个类中,这样我们有新的Pizza种类时,只需要修改该类就可,其它有创建到Pizza对象的代码就不需要修改了.使用简单工厂模式
以上是关于传统方式解决披萨制作问题的主要内容,如果未能解决你的问题,请参考以下文章