| 披萨项目:要便于披萨种类的扩展,要便于维护 |
| 1) 披萨的种类很多(比如 GreekPizz、CheesePizz 等) |
| 2) 披萨的制作有 prepare,bake, cut, box |
| 3) 完成披萨店订购功能。 |
| package com.atguigu.factory.simplefactory.pizzastore.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() { |
| |
| System.out.println(" 给胡椒披萨准备原材料 "); |
| } |
| } |
| |
| public class GreekPizza extends Pizza { |
| @Override |
| public void prepare() { |
| |
| System.out.println(" 给希腊披萨 准备原材料 "); |
| } |
| } |
| |
| public class CheesePizza extends Pizza { |
| @Override |
| public void prepare() { |
| |
| 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.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) { |
| |
| new OrderPizza(); |
| } |
| } |
-
当我们新增1种披萨的时候,会比较复杂

-
传统的方式的优缺点
| 1) 优点是比较好理解,简单易操作。 |
| 2) 缺点是违反了设计模式的ocp原则,即对扩展开放,对修改关闭。即当我们给类增加新功能的时候,尽量不修改代码,或者尽可能少修改代码. |
| 3) 比如我们这时要新增加一个Pizza的种类(Pepper披萨),我们需要做如下修改 |
| 4) 改进的思路分析 |
| 分析:修改代码可以接受,但是如果我们在其它的地方也有创建Pizza的代码,就意味着,也需要修改,而创建Pizza的代码,往往有多处。 |
| 思路:把创建Pizza对象封装到一个类中,这样我们有新的Pizza种类时,只需要修改该类就可,其它有创建到Pizza对象的代码就不需要修改了.使用简单工厂模式 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术