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());

    }
    }


     
  • 相关阅读:
    21.策略模式(Strategy Pattern)
    22.访问者模式(Visitor Pattern)
    23.状态模式(State Pattern)
    20.备忘录模式(Memento Pattern)
    18.中介者模式(Mediator Pattern)
    Delphi OpenDialog1 文件过滤及多选实现
    计算机存储单位/容量单位(bit、B、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB、CB) 和 带宽单位 bps
    生成FTP快捷键,通过资源管理器打开的方法
    Delphi WinAPI SetJob-暂停、继续、取消或重新启动指定打印机上的打印作业。
    Delphi WinAPI FindFirstPrinterChangeNotification 和FindNextPrinterChangeNotification
  • 原文地址:https://www.cnblogs.com/qingchun-com/p/7814740.html
Copyright © 2011-2022 走看看