装饰者(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
分享到:
相关推荐
这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...
这个“23种设计模式学习笔记”文档将引导你深入理解这些模式,并帮助你在实际编程中有效地应用它们。以下是对23种设计模式的详细解读: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。它常用于控制...
以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...
在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”中,作者通过实例讲解了装饰模式的基本概念、结构和应用场景。这篇文章可能是从CSDN博客平台上的一个链接访问的,遗憾的是,由于我们当前无法直接访问该链接,所以...
《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...
在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...
这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...
### Head First 设计模式学习笔记知识点总结 #### 1. 欢迎来到设计模式世界:设计模式入门 - **业务场景**: - **需求背景**:开发一款模拟鸭子的游戏,游戏内包含多种不同种类的鸭子,每种鸭子具有不同的外观...
以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
在《深入浅出设计模式》的学习笔记中,我们可以看到几种关键的设计模式及其应用,包括策略模式、观察者模式、装饰者模式、工厂模式和抽象工厂模式。 1. **策略模式**: - 策略模式的核心在于将算法族封装在独立的...
总的来说,这份“Java学习笔记及设计模式”资源是Java初学者和进阶者的宝贵财富,它不仅涵盖了语言的核心概念,还提供了实际问题的解决方案,有助于提升开发者的专业素养和解决问题的能力。无论是准备面试,还是提升...
### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂类,这个工厂类能够根据不同的输入参数返回不同的对象实例。简单工厂模式并不涉及继承关系,...
8. **装饰器模式**:动态地给一个对象添加一些额外的职责,既扩展了功能,又不改变其接口。 9. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。它可以用于远程代理、虚拟代理、缓存等。 10. **桥接...
16. **设计模式**:可能包含常见的23种设计模式,如单例,工厂,观察者,装饰器,适配器等模式的应用场景和实现。 17. **JVM内部机制**:虚拟机内存结构,类加载机制,字节码执行,性能优化等方面的知识。 这份...
### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...
【PS高手之路学习笔记】这篇笔记主要涵盖了Photoshop(简称PS)中的色彩模式和绘画装饰工具的使用。在PS的学习过程中,理解并掌握这些基础知识至关重要。 首先,我们来看色彩模式。色彩模式决定了图像中颜色的表现...
在软件工程领域中,设计模式(Design ...以上为尚学堂300Java设计模式部分学习笔记中的重点设计模式知识,每个模式都有其独特应用场景和代码实现,通过学习和实践这些设计模式,可以提高软件设计的质量和开发效率。
《C++20设计模式》学习笔记-第9章装饰器模式-配套代码