zoukankan      html  css  js  c++  java
  • 第一节:装饰者设计模式-需求分析与传统实现

    一、需求分析

      星巴克咖啡订单项目:

      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)考虑使用 装饰者模式;

  • 相关阅读:
    lua敏感词过滤
    解决灰色shader与mask冲突的方案
    Lua加密
    不同版本Lua介绍
    如何用pycharm 控制远程服务器来跑代码!!!!!!!!!!!!非常牛逼
    如何用win10自带linux系统学习c语言---解决gdb使用问题
    分享一些机器学习,数学和工科书籍和看过的一些论文笔记都在里面
    登录网站的autohotkey脚本
    wmware虚拟化的启动问题
    茶杯头开枪ahk代码
  • 原文地址:https://www.cnblogs.com/niujifei/p/14318589.html
Copyright © 2011-2022 走看看