• 面向对象设计模式实例


    食堂有红豆豆浆、黄豆豆浆、黑豆豆浆等五种豆浆(具体哪五种忘了),有小杯、中杯、大杯、超大杯四种杯子规格。顾客可以根据需要自己添加盐或者糖两种调料。为了尽可能减少类的种类,采用哪两种设计模式。已知创建型模式有:简单工厂、工厂方法、单例模式;结构型模式有:桥模式、装饰者模式、适配器模式;行为型模式有:策略模式、观察者模式。

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-26 22:30
      关注

      引自免费微信小程序:皆我百晓生

      在解决这个问题时,我们可以通过分析不同的设计模式来找到最优解。首先,让我们确定目标系统的需求。在这个场景中,我们需要一个可以处理多种豆浆和调料组合的系统。我们可以将这个需求视为一个算法,它需要根据给定的参数计算出最终的豆浆配方。

      1. 简单工厂模式

      • 描述:简单的工厂模式定义了一个产品集合,并提供一种方法来选择并返回一个特定的产品实例。
      • 应用:在这种情况下,我们可以创建一个工厂,它接受用户提供的参数(例如,豆浆类型、调料)并返回相应的豆浆配方。

      2. 单例模式

      • 描述:单例模式确保只有一个实例存在且其唯一实例在整个程序生命周期内都是可访问的。
      • 应用:对于每个特定的豆浆品种,我们可以有一个单独的单例工厂来处理这些饮品,这样可以提高系统的健壮性和安全性。

      3. 桥模式

      • 描述:桥模式允许客户端通过单一接口与多个继承关系中的类通信,而无需明确知道它们之间的继承关系。
      • 应用:在这个场景中,我们可以将每种豆浆作为桥梁,使得客户可以选择不同的豆浆类型而不必关心具体的实现细节。

      4. 装饰者模式

      • 描述:装饰者模式使一个对象具有另一个对象的功能,从而扩展它的功能而不改变它的内部表示。
      • 应用:我们可以为每种调料提供一个装饰器类,这样顾客就可以根据需要添加额外的调料。

      5. 观察者模式

      • 描述:观察者模式允许一个对象(称为主题)通知其他对象(称为观察者)有关状态变化。
      • 应用:我们将所有的调料都看作是主题,然后创建一些观察者来跟踪调料的状态。当某个调料的状态发生变化时,所有相关的观察者都会被通知。

      结论

      综合考虑上述各种设计模式,我们建议使用单例模式和策略模式来满足需求。单例模式保证了只有唯一的一个豆浆工厂实例,这有助于保持系统的稳定性和一致性。策略模式则用于定义一系列相关的方法,这些方法共同完成一个操作,而且这些方法之间可以相互调用。在这种情况下,我们可以将每种豆浆的制作过程作为一个策略,让顾客选择他们想要的豆浆配方。

      public class BeverageFactory {
          public static Beverage createBeverage(String type, String... ingredients) {
              // 根据传入的参数构建具体的饮料
              return new Beverage(type, ingredients);
          }
      }
      
      class Beverage {
          private final String type;
          private final String[] ingredients;
      
          public Beverage(String type, String... ingredients) {
              this.type = type;
              this.ingredients = ingredients;
          }
      
          public String getType() {
              return type;
          }
      
          public String[] getIngredients() {
              return ingredients;
          }
      
          public void prepare() {
              System.out.println("Preparing " + type + " with " + Arrays.toString(ingredients));
          }
      }
      

      在这个例子中,我们创建了一个BeverageFactory类来管理不同类型的饮料。每个饮料都有一个具体的构造函数,其中包含所需的参数。此外,我们还创建了一个Beverage类来表示具体的饮料,以及一个prepare()方法来打印准备过程。通过这种方式,我们实现了需求中关于如何处理多种豆浆和调料的要求。

      展开全部

    • 相关阅读:
      Java学习——泛型通配符
      数理统计的基本概念(一)
      【数据结构C/C++】单向链表的增删改查
      FL Studio21水果编曲软件如何切换成官方中文版
      pageoffice打开excel文件变成了打开本地~tempXXXX-Excel文件
      Java_泛型 详解总结 (精心打磨多次,一篇看懂泛型)
      【开源】基于Vue和SpringBoot的服装店库存管理系统
      浅谈STL|STL函数对象篇
      团队Git规范文档(操作规范及提交规范)
      Leetcode 101. 对称二叉树
    • 原文地址:https://ask.csdn.net/questions/8124482