装饰者(Decorator)模式又名包装(Wrapper)模式,它动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
package org.kangsg219.abst;
//星巴兹咖啡抽象类
public abstract class Beverage {
public String description="Unknown Beverage!";
public String getDescription(){
return description;
}
public abstract double cost();
}
package org.kangsg219.abst;
//调料(Condiment)抽象类
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
package org.kangsg219.impl;
import org.kangsg219.abst.Beverage;
//浓缩咖啡(Espresso)具体类
public class Espresso extends Beverage {
public Espresso(){
description="Espresso";
}
@Override
public double cost() {
return 1.99;
}
}
package org.kangsg219.impl;
import org.kangsg219.abst.Beverage;
//HouseBlend咖啡具体类
public class HouseBlend extends Beverage {
public HouseBlend(){
description="HouseBlend";
}
@Override
public double cost() {
return 0.89;
}
}
package org.kangsg219.impl;
import org.kangsg219.abst.Beverage;
import org.kangsg219.abst.CondimentDecorator;
public class Mocha extends CondimentDecorator {
public 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;
}
}
package org.kangsg219.impl;
import org.kangsg219.abst.Beverage;
import org.kangsg219.abst.CondimentDecorator;
//奶泡具体装饰类
public class Whip extends CondimentDecorator {
public Beverage beverage;
public Whip(Beverage beverage){
this.beverage=beverage;
}
@Override
public String getDescription() {
return beverage.getDescription()+",Whip";
}
@Override
public double cost() {
return beverage.cost()+ 0.10;
}
}
package org.kangsg219.test;
import org.kangsg219.abst.Beverage;
import org.kangsg219.impl.Espresso;
import org.kangsg219.impl.HouseBlend;
import org.kangsg219.impl.Mocha;
import org.kangsg219.impl.Whip;
public class StarbuzzCoffee {
public static void main(String[] args) {
//仅要一杯浓缩咖啡,不要调料。
Beverage beverage=new Espresso();
System.out.println(beverage.getDescription()+" $"+beverage.cost());
//双倍摩卡的HouseBlend咖啡
Beverage beverage2=new HouseBlend();
beverage2=new Mocha(beverage2);
beverage2=new Mocha(beverage2);
beverage2=new Whip(beverage2);
System.out.println(beverage2.getDescription()+" $"+beverage2.cost());
}
}
运行结果:
Espresso $1.99
HouseBlend,mocha,mocha,Whip $1.39
分享到:
相关推荐
HeadFirst 设计模式学习笔记3--装饰模式 Demo http://blog.csdn.net/laszloyu/archive/2010/05/12/5582561.aspx
《C++20设计模式》学习笔记-第9章装饰器模式-配套代码
工厂模式,策略模式,装饰模式,代理模式,工厂方法模式,原型模式等23个设计模式
Head First学习笔记+Head First之装饰者模式高清PDF
结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、...
2. 结构型模式:结构型模式关注对象之间的组合关系,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。这些模式可以帮助我们更好地组织和管理对象之间的关系,提高代码的灵活性和可...
将不同的功能代码解耦桥接模式装饰器模式适配器模式外观模式组合模式享元模式行为型模式(更新中...)作用:将不同的行为代码解耦观察者模式模板方法模式策略模式职责链模式状态模式迭代器模式访问者模式备忘录模式...
该文档是自己在学习设计模式时整理的常用设计模式pdf文档,包括源码,包括装饰模式,代理模式,责任链模式,命令模式,解释器模式,迭代器模式,备忘录模式,观察者模式,工厂模式,建造者模式,适配器模式,桥梁...
装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 《程序员代码面试指南(左程云)》 第四部分 第五部分 第六部分 有任何问题欢迎联系: 欢迎...
装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 《程序员代码面试指南(左程云)》 第四部分 第五部分 第六部分 有任何问题欢迎联系: 欢迎...
装饰模式 享元模式 桥接模式 ##第二部分 ##第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 《程序员代码面试指南(左程云)》 ##第四部分 ##第五部分 ##第六部分 有任何问题欢迎联系...
describe:设计模式学习笔记 逻辑结构图 代码结构图 设计模式简述 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰器模式,代理模式,...
装饰模式 享元模式 桥接模式 Builder模式 状态模式 解释器模式 观察者模式 备忘录模式 迭代器模式 访问者模式 中介者模式 第二部分:JAVA 第三部分:Spring框架 第四部分:中间件 第五部分 链表 字符串 树 图 查找 ...
学习笔记较长,如果想查看文章的目录,chrome浏览器可以配合简悦插件使用,或者下载到本地使用Typora打开。 :hot_beverage: Java基础 Java容器 Java并发 数据结构和算法 数据结构 树 图 算法 分治 动态规划 回溯 ...
针对几种经典软件设计模式:模板方法模式 外观模式 代理模式 装饰器模式 桥模式 工厂方法模式 组合模式等给出了简单易懂的讲解,透彻明了。很好的学习资料哦,是我平时学习时做的笔记外加自己的理解,很不错的……
Java Design Patterns 学习笔记 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
装饰模式 享元模式 桥接模式 第二部分 第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 《程序员代码面试指南(左程云)》 第四部分 第五部分 第六部分 有任何问题欢迎联系: 欢迎...
装饰模式 享元模式 桥接模式 ##第二部分 ##第三部分 链表 字符串 树 图 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 《程序员代码面试指南(左程云)》 ##第四部分 ##第五部分 ##第六部分 有任何问题欢迎联系...