zoukankan      html  css  js  c++  java
  • 设计模式(三)装饰者模式

    装饰者模式的应用实例 - 咖啡馆

    星巴克咖啡馆想要一份菜单系统,要求能够计算不同种类咖啡加上不同调料(牛奶、豆浆、摩卡、奶泡。。。)的价格。Tom做了如下实现:

    每个咖啡都要继承这个饮料类,然后对是否有各种调料进行配置,然后实现cost()方法。这样基本解决了这个问题,但是如果现在又增加了几种饮料,是不是需要更改现在的代码呢?如何才能不对以前代码做修改的基础上实现不同饮料的变化呢?

    装饰者模式的定义

    装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

    定义装饰者模式:类图

    现在我们就DarkRoast咖啡为对象(被装饰者),而采用Mocha和Whip装饰它。

    咖啡馆的设计模型

    注意:对象和装饰者必须保证具有同一种超类型,用于实现相互包含,在任何需要原始对象(即被包装对象的时候可以用已包装过的对象代替它)。这样,对象可以在任何时候被装饰,可以动态、不限量的修改装饰。

  • 相关阅读:
    高斯消元
    Luogu P2068 统计和
    Luogu P1892 [BOI2003]团伙
    Luogu P2866 [USACO06NOV]糟糕的一天Bad Hair Day
    Luogu P3916 图的遍历
    Luogu P1041 [2003NOIP提高组]传染病控制
    Luogu P3901 数列找不同
    Luogu 2951 捉迷藏Hide and Seek
    Luogu P1550 打井Watering Hole
    洛谷——P1044 栈
  • 原文地址:https://www.cnblogs.com/torresliang/p/4331284.html
Copyright © 2011-2022 走看看