`
从百草园到三味书屋
  • 浏览: 52266 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

设计模式之装饰器模式

 
阅读更多
package decorate;
/**
 * 设计模式之装饰器模式:动态给某个对象添加一些额外的职责。
 * 该模式涉及4个角色
 * 1、接口或者是抽象类(Abstract)
 * 2、需要被装饰的对象(Impl)---实现接口或者继承抽象类
 * 3、装饰类(Decorate)--也实现接口或者继承抽象类
 * 4、继承装饰类的子类(DecorateImpl)
 *
 * @author  
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class Test {

	public static void main(String[] args) {
		Abstract impl = new Impl();
		Decorate decorate = new DecorateImpl(impl);
		decorate.buy();
	}
}

package decorate;

/**
 * 抽象类或者接口
 *
 * @author 
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public abstract class Abstract {

	public abstract void buy();
}

package decorate;

/**
 * 实现类,该类实现Abstract
 *
 * @author  
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class Impl extends Abstract{

	@Override
	public void buy() {
		System.out.println("buy meat...");
	}
}

package decorate;

/**
 * 装饰器
 *
 * @author 
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class Decorate extends Abstract{

	private Abstract impl;
	
	public Decorate(Abstract impl){
		this.impl = impl;
	}

	@Override
	public void buy() {
		impl.buy();
	}
	
}


package decorate;

/**
 * 具体的装饰器
 *
 * @author  
 * @since   Pattern 1.0.0
 * @created 2013-1-18
 */
public class DecorateImpl extends Decorate{

	public DecorateImpl(Abstract impl) {
		super(impl);
	}

	public void buy(){
		this.goToShop();
		super.buy();
		this.payMoney();
		this.backHome();
	}
	
	public void goToShop(){
		System.out.println("goto shop...");
	}
	
	public void payMoney(){
		System.out.println("pay money...");
	}
	
	public void backHome(){
		System.out.println("back home...");
	}
}



测试结果:
goto shop...
buy meat...
pay money...
back home...
分享到:
评论

相关推荐

    54-Spring设计模式之装饰器模式1

    Spring 设计模式之装饰器模式详解 在软件设计中,经常会遇到需要在不修改原有代码的情况下,添加新的功能或行为。这时,装饰器模式便可以发挥其作用。在 Spring 设计模式中,装饰器模式是非常重要的一种设计模式。 ...

    Java设计模式之装饰器模式.docx

    【Java设计模式之装饰器模式】装饰器模式是一种结构型设计模式,它的主要目的是在不修改已有对象的前提下,通过添加额外的职责来扩展对象的功能。这种模式遵循单一职责原则,使得扩展职责时不会破坏原有对象的结构。...

    23设计模式之装饰器模式-前端篇.pptx

    在前端开发中,装饰器模式常用于实现AOP(面向切面编程),比如日志记录、性能监控、权限控制等功能。通过定义装饰器函数,可以在不侵入原代码逻辑的情况下,控制代码的执行流程。例如,可以创建一个`logDecorator`...

    PHP设计模式之装饰器模式定义与用法详解

    装饰器模式是23种经典设计模式中的一种结构型模式,它允许动态地给一个对象添加额外的职责,就像给一个礼物进行包装一样,可以在不改变其自身的情况下,为其增加新的功能或行为。 在PHP中,装饰器模式的实现通常...

    java设计模式之装饰器模式的实现

    二、编程实现一个咖啡售卖模块,咖啡店需要售卖各种各样的组合咖啡:基本的黑咖啡,10元加糖 2元加冰 1元加奶 3元加巧克力 4元而且每种添加料可以重复添加。最后显示示例为:加糖加冰加奶的黑咖啡 16元。...

    PHP设计模式之装饰器模式定义与用法简单示例

    本文实例讲述了PHP设计模式之装饰器模式定义与用法。分享给大家供大家参考,具体如下: 装饰器模式: 如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构或不使用继承,动态的扩展一个对象的...

    设计模式-装饰器模式

    装饰器模式是一种结构型设计模式,它允许在不修改对象本身的情况下动态地为对象添加新的行为或职责。这种模式在软件工程中广泛应用,特别是在需要扩展已有功能而不影响原有代码结构时。在iOS开发中,装饰器模式同样...

    c++设计模式-结构型模式-装饰器模式

    c++设计模式-结构型模式-装饰器模式;QT工程;c++简单源码; 装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

    JAVA设计模式学习12——装饰器模式

    装饰器模式是面向对象设计模式的一种,主要用于在不改变原有对象结构的情况下,动态地为对象增加新的功能。这种模式在Java中尤其常见,因为它允许我们遵循“开闭原则”——对扩展开放,对修改关闭。 装饰器模式的...

    设计模式之装饰模式

    6. **工具应用**:在实际开发中,装饰模式常与其他设计模式结合使用,如工厂模式用于创建装饰器对象,策略模式用于选择合适的装饰策略。通过理解装饰模式,开发者可以更好地利用现有的工具库,或者设计出更灵活、可...

    设计模式之装饰者模式,内含可运行代码

    总的来说,装饰者模式是一种强大的设计模式,它提供了一种在运行时动态调整对象行为的方法,使得代码更具灵活性和可扩展性。通过理解和熟练运用装饰者模式,我们可以更好地应对软件需求的变化,提高代码的可维护性和...

    java常用设计模式-装饰器模式

    Java 设计模式 - 装饰器模式 装饰器模式(Decorator Pattern)是一种结构性设计模式,它允许您在不影响同一类的其他对象的行为的情况下,静态或动态地向单个对象添加行为。该模式非常有用,当您想要在运行时添加或...

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    JAVA设计模式之装饰模式代码

    装饰模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或责任,而无需修改对象的源代码。在Java中,装饰模式通常通过继承和组合来实现,提供了比子类化更灵活的方式来扩展对象的功能。 装饰模式的核心...

    java设计模式之装饰者模式代码

    装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展对象的功能,为对象提供新的行为,同时保持了代码的可读性和可维护...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    设计模式 - 装饰模式(C++实例)

    在实现中,装饰器模式通常遵循以下步骤: 1. 定义组件接口。 2. 创建原始组件类,实现接口。 3. 创建装饰器类,包含对组件的引用,并实现组件接口。 4. 创建具体装饰器类,扩展装饰器类,添加新的行为。 5. 在客户端...

Global site tag (gtag.js) - Google Analytics