`
tsface
  • 浏览: 9321 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

[3]设计模式——装饰器模式

阅读更多

装饰器模式

 

       装饰器模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更加灵活。

 

      类图:

 


 

 

 

      Component:定义一个组件接口,可以给这些对象动态的添加职责

      ConcreteComponent:定义了一个具体的组件

      Decorator:装饰接口,持有一个对组件的引用,从外类来扩展组件的功能。

      ConcreteDecoratorA:具体的装饰对象,对组件进行装饰:

 

      

     Component接口:

      

/*
 * @(#)Component.java 2014-3-30
 */
package com.decorator;

/**
 * 定义一个对象接口,可以给这些对象动态的添加职责
 * @author liyan
 * @version 2014-3-30
 * @since 1.0
 */
public interface Component
{
	public void opreation();
}

 

    ConcreteComponent:

    

/*
 * @(#)ConcreteComponent.java 2014-3-30
 */
package com.decorator;

/**
 * 具体的对象
 * @author liyan
 * @version 2014-3-30
 * @since 1.0
 * @see
 */
public class ConcreteComponent implements Component
{

	@Override
	public void opreation()
	{
		System.out.println("具体的实现对象");
	}
	
}

 

     Decorator:

 

     

/*
 * @(#)Decorator.java 2014-3-30
 */
package com.decorator;

/**
 * 装饰器接口,维持一个组件对象的引用
 * @author liyan
 * @version 2014-3-30
 * @since 1.0
 * @see
 */
public class Decorator implements Component
{
	protected Component component;
	
	public Decorator(Component component)
	{
		this.component = component;
	}
	
	@Override
	public void opreation()
	{
		component.opreation();
		
	}
	
}

 

 

    装饰器A对象:

/*
 * @(#)ConcreteDecoratorA.java 2014-3-30
 */
package com.decorator;

/**
 * 描述当前类的作用
 * @author liyan
 * @version 2014-3-30
 * @since 1.0
 * @see
 */
public class ConcreteDecoratorA extends Decorator
{

	public ConcreteDecoratorA(Component component)
	{
		super(component);
	}

	@Override
	public void opreation()
	{
		System.out.println("ConcreteDecoratorA 装饰了当期组件");
		// TODO Auto-generated method stub
		super.opreation();
	}
	
}

 

 

       装饰器B对象:

 

 

package com.decorator;

public class ConcreteDecoratorB extends Decorator
{
	
	public ConcreteDecoratorB(Component component)
	{
		super(component);
	}

	@Override
	public void opreation()
	{
		System.out.println("B装饰器的实现 装饰了组件对象");
		super.opreation();
	}
	
}

 

   实现测试:

   

/*
 * @(#)Test.java 2014-3-30
 */
package com.decorator;

/**
 * 描述当前类的作用
 * @author liyan
 * @version 2014-3-30
 * @since 1.0
 * @see
 */
public class Test
{
	public static void main(String[] args)
	{
		Component component = new ConcreteComponent();
		
		//采用装饰器对组件进行“装饰”
		Decorator decoratorA = new ConcreteDecoratorA(component);
		Decorator decoratorB = new ConcreteDecoratorB(decoratorA);
		
		//调用A装饰器的装饰过程
		decoratorA.opreation();
		
		//同理调用B的
		decoratorB.opreation();
	}
}

 

 

    结果:

     

ConcreteDecoratorA 装饰了当期组件
具体的实现对象
B装饰器的实现 装饰了组件对象
ConcreteDecoratorA 装饰了当期组件
具体的实现对象

 

 

       系统什么时候用装饰器:

       当系统需要新增功能的时候,是向旧的类中添加新的代码。这些新增加的代码通常装饰了原有类的核心职责或者主要行为,在主类中加入新的字段,新的方法和新的逻辑,从而增加了主类的复杂度。而这些新增的东西仅仅是为了满足一些只有在特定情况下才会执行的特殊行为需求。装饰器为上述需求提供了一个较好的解决方案,它把每个要装饰的功能放在单独的类中,并让这些类包含它所要装饰的对象,因此,当需要执行特殊行为的时候,客户端代码可以在运行时候根据需要有选择的,按照顺序的使用装饰包装类(组件)。


 2014/03/30 tsface 南京

hanily@msn.com

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

相关推荐

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

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

    设计模式——装饰模式

    装饰模式是一种设计模式,它允许在不改变对象自身的基础上,在运行时给对象添加新的行为或属性,从而扩展其功能。这种模式遵循开闭原则,即对扩展开放,对修改关闭。在Java等面向对象语言中,装饰模式通常通过继承和...

    C#设计模式——装饰模式应用实例

    `Program.cs`文件包含了主程序逻辑,可能包括创建和组合不同装饰器的代码。例如,我们可以创建一个`TextBox`对象,然后用`ScrollBarDecorator`和`BlackBorderDecorator`装饰它,使得文本框具有滚动条和黑边框。 `...

    设计模式——刘伟

    4. **装饰器模式**:动态地给一个对象添加一些额外的职责,既保留了原有类的行为,又可以扩展其功能,避免使用继承带来的复杂性。 5. **适配器模式**:将两个不兼容的接口通过适配器进行转换,使得原本不能一起工作...

    设计模式——GFour

    《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...

    设计模式——原版的设计模式

    设计模式是一种在软件设计中被广泛认可的解决特定问题、经过良好记录并可重用的解决方案。它们代表了在各种编程环境中反复出现的问题的最佳实践。原版的设计模式通常指的是最初由“Gang of Four”(GoF)在他们的...

    装饰模式——装饰模式.doc

    装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...

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

    装饰器模式可以在不改变对象接口的情况下,动态地给对象添加新的行为或职责。而代理模式可以用来控制对原对象的访问,比如在访问前进行权限检查。 设计模式的应用不仅限于单一模式的使用,更多时候是多种模式的结合...

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

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

    设计模式——可复用面向对象软件的基础(1)

    在《设计模式——可复用面向对象软件的基础》这本书中,作者Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(合称GoF)首次提出了23种面向对象设计模式。这些模式涵盖了不同设计场景,如创建型模式、...

    设计模式——JAVA.docx

    - **结构型模式**(共7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 - **行为型模式**(共11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    3. **模式间的相互关系**:了解不同设计模式之间的关联和区别,比如装饰器和代理模式的区别,或者单例模式与静态内部类的实现差异。 4. **模式的优缺点**:评估每种模式的适用性和潜在问题,如过度设计或性能影响。 ...

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

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

    java设计模式——告诉新手一些不知道的东西

    结构型模式关注如何组合类和对象以形成更大的结构,如适配器模式、装饰器模式和代理模式,它们帮助我们在不同组件之间建立连接,实现类的扩展和接口的增强。行为型模式则关注对象之间的交互和责任分配,如观察者模式...

    设计模式可复用面向对象软件的基础.zip

    1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象接口 9 1.6.4 描述对象...

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

    结构型模式如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),则关注如何组合和连接类与对象,以达到新的功能。行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)_《0528》.rar

    结构型模式关注如何将对象和类组合成更大的结构,如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy)等,它们提供了更好的抽象和接口集成。行为型模式则关注对象之间的交互和职责分配,如策略...

Global site tag (gtag.js) - Google Analytics