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

     装饰模式:动态的将责任附加到对象上。若要扩展功能,装饰者提供比继承更有弹性的替代方案
    * 1)装饰者和被装饰者有相同的超类型
    * 2)装饰者可以在所委托被装饰者的行为之前/之后,加上自己的行为,以达到特定的目的。

    /**
    * Created by wqc on 2017/10/14.
    * 饮料的超类:只包含饮料的描述方法description和计算价格的方法cost
    */
    public abstract class Beverage {
    String description = "Unknown Beverage";

    public String getDescription()
    {
    return description;
    }

    public abstract double cost();
    }

    /**
    * Created by wqc on 2017/10/14.
    * 装饰者--调料的超类:所有的调料都需重新描述方法
    */
    public abstract class CondimentDecorator extends Beverage{
    public abstract String getDescription();
    }


    /**
    * Created by wqc on 2017/10/14.
    * 装饰者:调料--摩卡
    */
    public class Mocha extends CondimentDecorator{
    Beverage beverage;
    public Mocha(Beverage beverage)
    {
    this.beverage = beverage;
    }

    @Override
    public String getDescription() {
    return beverage.getDescription()+",Mocha";
    }

    @Override
    public double cost() {
    return beverage.cost()+0.20;
    }
    }

    /**
    * Created by wqc on 2017/10/14.
    * 装饰者:调料--豆浆
    */
    public class Soy extends CondimentDecorator {
    Beverage beverage;
    public Soy(Beverage beverage)
    {
    this.beverage = beverage;
    }
    @Override
    public String getDescription() {
    return beverage.getDescription()+",Soy";
    }

    @Override
    public double cost() {
    return beverage.cost()+0.3;
    }
    }


    /**
    * Created by wqc on 2017/10/14.
    * 被装饰者:饮料的实现类--溶缩咖啡
    */
    public class Espresso extends Beverage{

    public Espresso()
    {
    description = "Espresso";
    }
    @Override
    public double cost() {
    return 1;
    }
    }

    /**
    * Created by wqc on 2017/10/14.
    * 装饰模式:动态的将责任附加到对象上。若要扩展功能,装饰者提供比继承更有弹性的替代方案
    * 1)装饰者和被装饰者有相同的超类型
    * 2)装饰者可以在所委托被装饰者的行为之前/之后,加上自己的行为,以达到特定的目的。
    */
    public class test {
    public static void main(String[] args) {
    Beverage beverage = new Espresso();
    System.out.println(beverage.getDescription()+"---"+beverage.cost());

    beverage = new Soy(beverage);
    System.out.println(beverage.getDescription()+"---"+beverage.cost());

    beverage = new Mocha(beverage);
    System.out.println(beverage.getDescription()+"---"+beverage.cost());

    }
    }


     
  • 相关阅读:
    8.18 二讲背包问题之完全背包
    8.18 动态规划——背包问题之01背包
    8.17 动态规划——书的抄写
    7.25 二分查找模板
    7.19 股票问题
    7.12 枚举-Jam的计数法
    7.12 递归——双色hanoi塔问题
    7.11 NOIP2007普及组第3题 守望者的逃离
    高数之泰勒公式
    数据结构_线性表之链表(1)
  • 原文地址:https://www.cnblogs.com/qingchun-com/p/7814740.html
Copyright © 2011-2022 走看看