`
xgcai
  • 浏览: 8648 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

设计模式-装饰模式

 
阅读更多

装饰模式(包装器):动态地为对象添加一些额外的职责。

 

装饰模式是动态地扩展一个对象的功能,而不需要改变原始类代码。

 

装饰模式主要包括四种角色:

1、抽象组件(Component):定义了“被装饰者”需要进行装饰的方法。

2、具体组件(ConcreteComponent):抽象组件的子类,具体组件实例也称为“被装饰者”

3、装饰(Decorator):也是抽象组件的子类,还包含了抽象子组件变量,该类的实例称为“装饰者”。

4、具体装饰者(ConcreteDecorator):是装饰者的一个非抽象子类,该类的实例称为“装饰者”。

 

装饰者的类图:



 

 

 

 

 

例子说明:

现有一只麻雀能够飞行100M,假如想让麻雀能够飞行到150M,又不修改麻雀类代码,通过给麻雀安装一对电子翅膀,让麻雀能够飞行所要求的距离。

 

/**
 * 
 */
package org.rico.pattern.demo.decorator;

/**
 * @author rico 2013-3-10
 * 抽象组件
 */
public abstract class Bird {
	public abstract int fly();
}

 

/**
 * 
 */
package org.rico.pattern.demo.decorator;

/**
 * @author rico 2013-3-10
 * 具体组件
 */
public class Sparrow extends Bird {
	public static final int DISTANCE = 100;

	public Sparrow() {}
	
	/* (non-Javadoc)
	 * @see org.rico.pattern.demo.decorator.Bird#fly()
	 */
	@Override
	public int fly() {
		return DISTANCE;
	}

}

 

/**
 * 
 */
package org.rico.pattern.demo.decorator;

/**
 * @author rico 2013-3-10
 * 装饰器
 */
public abstract class Decorator extends Bird {
	protected Bird bird;
	
	public Decorator() {}
	
	public Decorator(Bird bird) {
		this.bird = bird;
	}
}

 

/**
 * 
 */
package org.rico.pattern.demo.decorator;

/**
 * @author rico 2013-3-10
 * 具体装饰器
 */
public class SparrowDecorator extends Decorator {
	public static final int DISTANCE = 50;
	
	public SparrowDecorator(Bird bird) {
		super(bird);
	}

	/* (non-Javadoc)
	 * @see org.rico.pattern.demo.decorator.Bird#fly()
	 */
	@Override
	public int fly() {
		return bird.fly()+extFly();		//开挂,让麻雀能多50
	}
	
	//装饰器新增方法
	private int extFly() {
		return DISTANCE;
	}

}

 

/**
 * 
 */
package org.rico.pattern.demo.decorator;

/**
 * @author rico 2013-3-10
 * 
 */
public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Bird bird = new Sparrow();								//能飞100米的麻雀
		Decorator decoratorOne = new SparrowDecorator(bird);	//能飞150米的麻雀
		Decorator decoratorTwo = new SparrowDecorator(decoratorOne);//能飞200米的麻雀
		
		System.out.println("######################################");
		System.out.println("####decoratorOne: " + decoratorOne.fly() + "####decoratorTwo: " + decoratorTwo.fly());
		System.out.println("######################################");
	}

}

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 20.7 KB
分享到:
评论

相关推荐

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

    装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在软件工程中非常常见,因为它提供了灵活性,使得我们可以独立于对象的组合来扩展功能。 在C++中,装饰...

    JAVA-设计模式-结构型模式-装饰模式

    JAVA-设计模式-结构型模式-装饰模式

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

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

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

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

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

    吉林大学设计模式-装饰模式练习

    2.开发一个系统帮助业务部门实现灵活的奖金计算。对于普通员工,主要有个人当月业务奖金、个人当月回款奖金等,对于部门经理,除了有普通员工的奖金外,还有...请写出你所选择的设计模式,画出类图,并给出核心代码。

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

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

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

    设计模式 - 装饰者模式.rar

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象本身。这种模式的核心思想是通过将对象包装在一个装饰类中来扩展功能,而不是通过继承。以下是对装饰者模式的详细阐述: ...

    设计模式-装饰者模式

    在“设计模式—装饰者模式”中,我们将深入探讨这个模式的概念、实现方式以及实际应用。 装饰者模式的核心概念在于“装饰”(Decorator)和“组件”(Component)。组件是被装饰的基本对象,它可以是接口或者抽象类...

    设计模式-装饰器模式

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

    23种设计模式--装饰模式

    装饰模式是一种结构型设计模式,它是面向对象设计中用来动态添加或修改对象功能的一种方法。在软件工程中,装饰模式允许我们向一个现有的对象添加新的行为或职责,同时又不改变其原有的结构,从而实现对类的功能扩展...

    设计模式--装饰模式

    装饰模式(Decorator Pattern)是一种结构型设计模式,其主要目的是在不改变对象自身的基础上,在运行时为对象添加新的行为或属性。它通过包装原有对象,而不是通过继承来扩展功能,从而提供了更大的灵活性,避免了...

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

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码或创建子类。这种模式的核心思想是通过将对象封装在一个装饰器对象内,来扩展对象的功能,同时保持原有接口的不变...

    设计模式-Java语言中的应用

    通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的设计模式,以及如何优雅地在Java代码中实现这些模式。这将有助于提升开发者的编程技巧,...

    Java设计模式-装饰者模式

    本章可以称为“给爱用继承的人一个全新的设计眼界”。我们即将再度探讨典型滥用问题。你将在本章学到如何使用对象组合的方式,做到在运行时装饰类。为什么呢?一旦你熟悉了装饰者的技巧...——《Head First 设计模式》

    C++设计模式-基于QT4开源跨平台开发框架 源码

    设计模式分为三大类:创建型模式(如单例、工厂方法、抽象工厂)、结构型模式(如代理、装饰器、适配器)和行为型模式(如观察者、策略、命令)。这些模式都是在特定上下文中解决设计问题的模板,它们可以提高代码的...

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    cpp代码-设计模式-装饰模式

    装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或职责,同时保持接口的一致性。这种模式在不修改原有对象的基础上,通过包装对象来扩展其功能,提供了比继承更加灵活的扩展机制。 在C++中...

Global site tag (gtag.js) - Google Analytics