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

    }
    }


     
  • 相关阅读:
    ruby on rails爬坑(三):图片上传及显示
    js 实现图片实时预览
    Rails中的content_tag与concat用法,可以连接任意html元素
    rspec中的shared_examples与shared_context有什么不同
    RSpec shared examples with template methods
    How to Test Controller Concerns in Rails 4
    JMeter压力测试入门教程[图文]
    京东后台图片优化技巧
    程序猿,千万别说你不了解Docker!
    DIV+CSS:页脚永远保持在页面底部
  • 原文地址:https://www.cnblogs.com/qingchun-com/p/7814740.html
Copyright © 2011-2022 走看看