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

    }
    }


     
  • 相关阅读:
    document.body.appendChild 的问题
    页面不刷新,表单提交到弹出窗口或Iframe
    您对无法重新创建的表进行了更改或者启用了 阻止保存要求创建表的更改
    转载:兼容各类浏览器的CSS Hack技巧
    sql server 代理权限问题
    配置SQL用户访问指定表,指定列
    关于嵌入式系统的启动(装载)
    centos 中安装g++
    嵌入式中利用ftp实现宿主机与目标机通信
    TQ2440加载Hello world驱动模块
  • 原文地址:https://www.cnblogs.com/qingchun-com/p/7814740.html
Copyright © 2011-2022 走看看