`
frank127
  • 浏览: 10943 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

decorator pattern

阅读更多
Decorator Pattern: attaches additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.

Meet the decorator pattern:

For example, if the customer wants a Dark Roast with Mocha and Whip, then we'll:

1. Take a DarkRoast object
2. Decorate it with a Mocha object
3. Decorate it with a Whip object
4. Call the cost() method and rely on delegation to add on the condiment costs

Constructing a drink order with Decorators
1. We start with our DarkRoast Object


2. The customer wants Mocha, so we create a Mocha object and wrap it around the DarkRoast.


3. The customer also wants Whip, so we create a whip decorator and wrap Mocha with it


4. Now its time to compute the cost for the customer. We do this by calling cost() on the outermost decorator, Whip, and Whip is going to delegate computing the cost to the objects it decorates. Once it gets a cost, it will add on the cost of the Whip.


summary:
* Decorators have the same supertype as the objects they decorate.
* You can use one or more decorators to wrap an object
* Given that the decorator has the same supertype as the object it decorates, we can pass around a decorated object in place of the original (wrapped) object
* The decorator adds its own behavior either before and/or after delegating to the object it decorates to do the rest of the job. (KEY POINT)
* Objects can be decorated at any time, so we can decorate objects dynamically at runtime with as many decorators as we like.


Class diagram


work our Starbuzz beverages into this framework


public abstract class Beverage {
String description = “Unknown Beverage”;
public String getDescription() {
return description;
}
public abstract double cost();
}


public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}


beverages:
public class Espresso extends Beverage {
public Espresso() {
description = “Espresso”;
}
public double cost() {
return 1.99;
}
}

public class HouseBlend extends Beverage {
public HouseBlend() {
description = “House Blend Coffee”;
}
public double cost() {
return .89;
}
}


condiments:
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + “, Mocha”;
}
public double cost() {
return .20 + beverage.cost();
}
}
分享到:
评论

相关推荐

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    DecoratorPattern.rar

    在"DecoratorPattern.rar"这个压缩包中,包含了装饰器模式的简单案例demo和一个使用MindMaster绘制的脑图。通过这个案例,我们可以深入理解装饰器模式的工作原理和应用场景。 1. 装饰器模式的基本结构: - ...

    03_DecoratorPattern 小菜扮靓

    在"03_DecoratorPattern 小菜扮靓"这个主题中,我们可以推断作者可能以轻松幽默的方式介绍了装饰器模式的概念。"小菜"可能是用来比喻待装饰的对象,"扮靓"则表示通过装饰增强其功能或特性。博文链接指向了iteye博客...

    装饰者模式(Decorator Pattern)原理图

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...

    通过C#实现设计模式-装饰模式(DecoratorPattern).rar

    装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类的实例,并在调用原始类方法之前或之后添加额外的...

    DecoratorPattern.zip

    装饰者模式(Decorator Pattern)是软件工程中一种用于动态地给对象添加职责的设计模式。它允许我们独立于对象的类来扩展对象的功能,无需修改原有代码就能增加新功能,遵循“开闭原则”。这种模式是一种结构型设计...

    Decorator Pattern

    装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的源代码。这种模式的核心思想是通过将功能包装在对象的外围来扩展其行为,而不是通过继承来实现。装饰...

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...

    DecoratorPattern.unitypackage

    这是一个关于设计模式中的装饰者模式例子,C#,Vs205,Unity 5.6.3f1 (64-bit)有需要的请下载!本来不想设置积分,可是最低1分,没办法!

    Decorator pattern

    4. **Concrete Decorator(具体装饰者)**:实现了Decorator接口,添加了一些新的行为或属性,具体装饰者通常会持有并调用Component对象的某个方法,然后添加额外的功能。 在提供的"Test"文件中,可能包含了一个...

    decoratorPattern

    在"decoratorPattern"这个示例中,我们可能看到一个简单的Java实现,其中包含了一个核心组件(Component)接口或抽象类,一个具体组件(Concrete Component)类,以及一个或多个装饰器(Decorator)类。装饰器类通常...

    java 装饰模式(Decorator Pattern)详解

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不修改已有对象的代码情况下,通过增加额外的行为来扩展对象的功能。这种模式的核心在于装饰类与被装饰类具有相同的接口,这样客户端可以像处理原始对象...

    java 装饰模式(Decorator Pattern)详解及实例代码

    装饰模式(Decorator Pattern)是一种结构型设计模式,它可以在不修改原有对象的基础上,通过添加新的职责来扩展对象的功能。装饰模式的核心在于它定义了一个与原类一致的接口,使得装饰类和原类可以互相替换,而...

    C#装饰器模式(Decorator Pattern)实例教程

    装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的原始代码。在C#中,装饰器模式通过创建一个包装对象,该对象拥有与原对象相同的接口,来实现对原...

    java实现装饰器模式(Decorator Pattern)

    Java 实现装饰器模式(Decorator Pattern) 装饰器模式是结构型设计模式之一,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的...

    详解java装饰模式(Decorator Pattern)

    【Java装饰模式(Decorator Pattern)】装饰模式是一种结构型设计模式,它允许在不修改已有对象的基础上,通过添加额外的功能来扩展对象的行为。这种模式的关键在于装饰类与被装饰类有相同的接口,使得它们可以互换...

    Design Pattern - Decorator

    装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时给对象添加新的行为或职责,同时保持对象的接口不变。这种模式的核心在于,它动态地将责任附加到对象上,通过将对象包装在一个装饰类中来扩展...

    design pattern

    在给定的压缩包文件中,包含了九种经典的设计模式示例,它们分别是:单例模式(Singleton)、策略模式(StrategyPattern)、适配器模式(AdapterPattern)、装饰者模式(DecoratorPattern)、抽象工厂模式...

    java Decorator装饰模式例子

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...

    [结构型模式] 装饰者模式的理解

    在给定的代码文件`DecoratorPattern.cpp`和`DecoratorPattern.h`中,我们可以预期看到以下内容: - `DecoratorPattern.h`可能包含了抽象组件、装饰器和具体装饰器的类定义。抽象组件定义了公共接口,装饰器继承了这...

Global site tag (gtag.js) - Google Analytics