• 第一节:装饰者设计模式-需求分析与传统实现


    一、需求分析

      星巴克咖啡订单项目:

      1、咖啡种类/单品咖啡:Espresso(意大利咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡);

      2、调料:Milk、Soy(豆浆)、Chocolate;

      3、要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便;

      4、使用 OO 的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡+调料组合。

      

    二、方案一

      

       分析:

      (1)Drink 是一个抽象类,表示饮料;

      (2)des 就是对咖啡的描述,比如咖啡的名字;

      (3)cost() 方法就是计算费用,Drink 类中做成一个抽象方法;

      (4)Decaf 就是单品咖啡,继承 Drink,并实现 cost;

      (5)Espress && Milk 就是单品咖啡 + 调料,这个组合情况很多;

      (6)问题:这样设计,会有很多类,当我们增加一个单品咖啡,或者增加一个调料,类的数量就会倍增,就会出现 类爆炸;

    三、方案二

      

       1、分析到方案1因为 咖啡单品 + 调料组合会造成类的倍增,因此可以做改进,将调料内置到 Drink 类,这样就不会造成类数量过多,从而提高项目的维护性;

      2、说明:milk、soy、chocolate 可以设计为 Boolean,表示是否要添加相应的调料。

       分析:

      (1)方案2可以控制类的数量,不至于造成很多的类;

      (2)在增加或者删除调料种类时,代码的维护量很大;

      (3)考虑到用户可以添加多分调料时,可以将 hasMilk 返回一个对应  int 值;

      (4)考虑使用 装饰者模式;

  • 相关阅读:
    大神没事接个活!
    帝国cms 后台账户密码都对,提示你还未登录!
    帝国cms 反馈时提示此信息反馈不存在
    帝国cms e:loop 文章编号标签
    eyoucms 首页以及列表页内容调用标题、关键词、描述
    eyoucms 点击下拉分类,没有分类的不切换代码
    eyoucms class类样式切换写法
    eyoucms if 判断显示或者隐藏
    eyoucms 调用搜索代码
    eyoucms 获取单页内容的代码
  • 原文地址:https://www.cnblogs.com/niujifei/p/14318589.html
Copyright © 2020-2023  润新知