美文网首页
设计模式系列-装饰者模式

设计模式系列-装饰者模式

作者: Yang0503 | 来源:发表于2019-03-15 17:30 被阅读0次

我觉得装饰者模式是在已有功能的基础之上,动态地添加更多 功能的一种方式,这些新加的代码装饰了原有类的 核心职责或主要行为。

类UML图

image.png

1、首先我们定义一个Coffce基类

/**
 * @ explain:这里Coffee相当于我们的Component,
 * 是要装饰的类
 *
 */
public abstract class Coffee {

    /**
     *
     * @return 返回价格
     */
    public abstract int getPrice();

    /**
     * 返回名字
     * @return
     */
    public abstract String getName();
}

2、接着 我们定义一个Decorator类继承 我们的Coffice基类

/**
 * @ explain:Decorator类继承 我们的Coffice基类
 * @ author:
 * @ email:
 */
public abstract class Decorator extends Coffee{

    protected Coffee mCoffee;

    /**
     * 通过组合的方式把Coffee对象传递进来
     * @param coffee
     */
    public Decorator(Coffee coffee){
        mCoffee=coffee;
    }
}

3、接下来我们来看我们的子类是怎样实现的

public class MilkDecorator extends Decorator {

    /**
     * 通过组合的方式把Coffee对象传递进来
     *
     * @param coffee
     */
    public MilkDecorator(Coffee coffee) {
        super(coffee);
    }

    @Override
    public int getPrice() {
        return mCoffee.getPrice()+10;
    }

    @Override
    public String getName() {
        return "addMilk";
    }
}

4、接下来不难想象加糖,就奶泡。就摩卡的操作,都是在原来的之上加上配料的价格

return mCoffee.getPrice()+2;
return mCoffee.getPrice()+15;
return mCoffee.getPrice()+20;

以后你想要计算加糖,就牛奶,加奶泡的咖啡的价格,只需要这样

mCoffee = new SimpleCoffee();
mCoffee = new SugarDecorator(mCoffee);
mCoffee = new MilkDecorator(mCoffee);
mCoffee = new MilkFoamDecorator(mCoffee);
int price1 = mCoffee.getPrice();
System.out.println("price1="+price1);

以后你想要计算加糖,就牛奶咖啡的价格,只需要这样

mCoffee = new SimpleCoffee();
mCoffee = new SugarDecorator(mCoffee);
mCoffee = new MilkDecorator(mCoffee);
int price1 = mCoffee.getPrice();
System.out.println("price1="+price1);

装饰者模式的优缺点

优点

  • 把类中的装饰功能从类中搬除,可以简化原来的类
  • 可以把类的 核心职责和装饰功能区分开来,结构清晰 明了并且可以去除相关类的重复的装饰逻辑。

相关文章

  • Android 装饰者模式

    Android 设计模式系列文章 Android 23种设计模式 一、前言 装饰者模式也称为包装模式,其使用一种对...

  • 设计模式

    设计模式 单例模式、装饰者模式、

  • 设计模式系列--装饰者模式

    意图 动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对...

  • 设计模式系列-装饰者模式

    我觉得装饰者模式是在已有功能的基础之上,动态地添加更多 功能的一种方式,这些新加的代码装饰了原有类的 核心职责或主...

  • 安卓设计模式(四)装饰者模式

    本文将讨论Java设计模式中比较重要的模式之一:装饰者模式 该系列其他文章: 安卓设计模式(一)面向对象六大设计原...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • java IO 的知识总结

    装饰者模式 因为java的IO是基于装饰者模式设计的,所以要了解掌握IO 必须要先清楚什么事装饰者模式(装饰者模式...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式系列——装饰者模式(DecoratorPattern)

    所谓的设计模式,其实是对面向对象编程思想中的一个转变,是在繁重需求任务中做到可扩展,高度灵活,并且适应业务开发而产...

  • 设计模式系列—装饰者(Decorator)模式

    《Head First设计模式》读书笔记 装饰者模式 一,场景介绍 1,需求 一杯主饮料(Beverage)需要加...

网友评论

      本文标题:设计模式系列-装饰者模式

      本文链接:https://www.haomeiwen.com/subject/npfrmqtx.html