| 需求 |
| 披萨项目新的需求:客户在点披萨时,可以点不同口味的披萨,比如 北京的奶酪pizza、北京的胡椒pizza 或者是伦敦的奶酪pizza、伦敦的胡椒pizza |
| |
| 思路1 |
| 使用简单工厂模式,创建不同的简单工厂类,比如BJPizzaSimpleFactory、LDPizzaSimpleFactory 等等.从当前这个案例来说,也是可以的, |
| 但是考虑到项目的规模,以及软件的可维护性、可扩展性并不是特别好 |
| |
| 思路2 |
| 使用工厂方法模式 |
| 工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现。 |
| 工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类 |
| 客户在点披萨时,可以点不同口味的披萨,比如 北京的奶酪pizza、北京的胡椒pizza 或者是伦敦的奶酪pizza、伦敦的胡椒pizza |

| package com.atguigu.factory.factorymethod.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; |
| } |
| } |
| |
| package com.atguigu.factory.factorymethod.pizzastore.pizza; |
| public class LDPepperPizza extends Pizza{ |
| @Override |
| public void prepare() { |
| |
| setName("伦敦的胡椒pizza"); |
| System.out.println(" 伦敦的胡椒pizza 准备原材料"); |
| } |
| } |
| |
| package com.atguigu.factory.factorymethod.pizzastore.pizza; |
| public class LDCheesePizza extends Pizza{ |
| |
| @Override |
| public void prepare() { |
| |
| setName("伦敦的奶酪pizza"); |
| System.out.println(" 伦敦的奶酪pizza 准备原材料"); |
| } |
| } |
| |
| package com.atguigu.factory.factorymethod.pizzastore.pizza; |
| public class BJPepperPizza extends Pizza { |
| @Override |
| public void prepare() { |
| |
| setName("北京的胡椒pizza"); |
| System.out.println(" 北京的胡椒pizza 准备原材料"); |
| } |
| } |
| |
| package com.atguigu.factory.factorymethod.pizzastore.pizza; |
| public class BJCheesePizza extends Pizza { |
| |
| @Override |
| public void prepare() { |
| |
| setName("北京的奶酪pizza"); |
| System.out.println(" 北京的奶酪pizza 准备原材料"); |
| } |
| } |
| |
| package com.atguigu.factory.factorymethod.pizzastore.order; |
| import java.io.BufferedReader; |
| import java.io.IOException; |
| import java.io.InputStreamReader; |
| import com.atguigu.factory.factorymethod.pizzastore.pizza.Pizza; |
| public abstract class OrderPizza { |
| |
| |
| abstract Pizza createPizza(String orderType); |
| |
| |
| public OrderPizza() { |
| Pizza pizza = null; |
| String orderType; |
| do { |
| orderType = getType(); |
| pizza = createPizza(orderType); |
| |
| 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.factorymethod.pizzastore.order; |
| import com.atguigu.factory.factorymethod.pizzastore.pizza.LDCheesePizza; |
| import com.atguigu.factory.factorymethod.pizzastore.pizza.LDPepperPizza; |
| import com.atguigu.factory.factorymethod.pizzastore.pizza.Pizza; |
| public class LDOrderPizza extends OrderPizza { |
| |
| @Override |
| Pizza createPizza(String orderType) { |
| |
| Pizza pizza = null; |
| if(orderType.equals("cheese")) { |
| pizza = new LDCheesePizza(); |
| } else if (orderType.equals("pepper")) { |
| pizza = new LDPepperPizza(); |
| } |
| |
| return pizza; |
| } |
| |
| } |
| |
| package com.atguigu.factory.factorymethod.pizzastore.order; |
| import com.atguigu.factory.factorymethod.pizzastore.pizza.BJCheesePizza; |
| import com.atguigu.factory.factorymethod.pizzastore.pizza.BJPepperPizza; |
| import com.atguigu.factory.factorymethod.pizzastore.pizza.Pizza; |
| public class BJOrderPizza extends OrderPizza { |
| |
| @Override |
| Pizza createPizza(String orderType) { |
| |
| Pizza pizza = null; |
| if(orderType.equals("cheese")) { |
| pizza = new BJCheesePizza(); |
| } else if (orderType.equals("pepper")) { |
| pizza = new BJPepperPizza(); |
| } |
| |
| return pizza; |
| } |
| |
| } |
| |
| package com.atguigu.factory.factorymethod.pizzastore.order; |
| public class PizzaStore { |
| public static void main(String[] args) { |
| String loc = "bj"; |
| if (loc.equals("bj")) { |
| |
| new BJOrderPizza(); |
| } else { |
| |
| new LDOrderPizza(); |
| } |
| } |
| } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步