`
qzriso
  • 浏览: 242634 次
  • 性别: Icon_minigender_1
  • 来自: ph
社区版块
存档分类
最新评论

设计模式之装饰者模式

阅读更多

1、定义及作用

      该模式以对客户端透明的方式扩展对象的功能。

2、涉及角色
      抽象构件角色:定义一个抽象接口,来规范准备附加功能的类。

      具体构件角色:将要被附加功能的类,实现抽象构件角色接口。

      抽象装饰者角色:持有对具体构件角色的引用并定义与抽象构件角色一致的接口。

      具体装饰角色:实现抽象装饰者角色,负责为具体构件添加额外功能。

 
  3、简单实现
抽象构件角色java 代码:

package  com.pattern.decorator2;
/** */ /**
 * 抽象构件角色
 * 
@author  zdw
 *
 
*/

public   interface  Component
{
    
// 默认方法A
     void  functionA();
}


具体构件角色:
package  com.pattern.decorator2;
/** */ /**
 * 具体构件角色
 * 
@author  zdw
 *
 
*/

public   class  ConcreateComponent  implements  Component
{
    
    
public   void  functionA()
    
{
        System.out.println(
" Function A " );
    }


}


抽象装饰者角色:
package  com.pattern.decorator2;

/** */ /**
 * 抽象装饰者角色
 * 
 * 
@author  zdw
 * 
 
*/

public   class  Decorator  implements  Component
{
    
// 抽象构件角色的引用
     private  Component component;
    
    
public  Decorator(Component component)
    
{
        
this .component  =  component;
    }


    
public   void  functionA()
    
{
        component.functionA();
    }


}

具体装饰者角色1:
package  com.pattern.decorator2;
/** */ /**
 * 具体装饰者角色
 * 
@author  zdw
 *
 
*/

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


    @Override
    
public   void  functionA()
    
{
        
super .functionA();
        
this .functionB();
    }

    
// 根据自己的需要扩展
     private   void  functionB()
    
{
        System.out.println(
" function B " );
    }

}


具体装饰者角色2:
package  com.pattern.decorator2;

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


    @Override
    
public   void  functionA()
    
{
        
super .functionA();
        
this .functionC();
    }


    
private   void  functionC()
    
{
        System.out.println(
" fucntion C " );
    }

}


测试类:
package  com.pattern.decorator2;

/** */ /**
 * 测试客户端
 * 
 * 
@author  zdw
 * 
 
*/

public   class  Client
{

    
/** */ /**
     * 
@param  args
     
*/

    
public   static   void  main(String[] args)
    
{
        
//  一层套一层,进行方法组合
        Component component  =   new  ConcreateDecorator( new  ConcreateDecorator1(
                
new  ConcreateComponent()));
        component.functionA();
    }


}

OO原则:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。

要点:
1、继承属于扩展形式之一,但不见得是达到弹性设计的最佳方案。
2、在我们的设计中,应该允许行为可以被扩展,而不须修改现有的代码。
3、组合和委托可用于在运行时动态地加上新的行为。
4、除了继承,装饰者模式也可以让我们扩展行为。
5、装饰者模式意味着一群装饰者类,这些类用来包装具体组件。
6、装饰者类反映出被装饰的组件类型(实际上,他们具有相同的类型,都经过接口或继承实现)。
7、装饰者可以在被装饰者的行为前面与/或后面加上自己的行为,甚至将被装饰者的行为整个取代掉,而达到特定的目的。
8、你可以有无所数个装饰者包装一个组件。
9、装饰者一般对组建的客户是透明的,除非客户程序依赖于组件的具体类型。
10、装饰者会导致设计中出现许多的小对象,如果过度使用,会让程序变得很复杂。

分享到:
评论

相关推荐

    Qt设计模式之装饰者模式

    装饰者模式(Decorator Pattern)是软件设计模式中的结构型模式之一,它允许在运行时动态地给一个对象添加新的行为或职责,而无需修改对象本身。在Qt库中,装饰者模式也被广泛应用,尤其在实现用户界面组件的扩展和...

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

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

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

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

    设计模式之装饰者模式-极客学院

    装饰者模式是面向对象设计中的一种结构型模式,它的主要目的是动态地给一个对象添加一些额外的职责,即增加功能,同时又不破坏原有的结构。装饰者模式是一种比继承更灵活的扩展对象行为的方式,它避免了类爆炸问题,...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...

    设计模式之装饰者模式1

    装饰者模式是一种设计模式,主要用来在不修改对象原有代码的情况下动态地扩展其功能。这种模式的核心在于,它通过创建包装对象,即装饰者,来实现对原对象功能的增强。装饰者通常与被装饰对象具有相同的接口,使得...

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

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

    javascript设计模式之装饰者模式.docx

    JavaScript中的装饰者模式是一种设计模式,它允许在不修改原有对象的基础上动态地扩展对象的功能。这种模式在软件工程中尤其有用,因为它可以帮助我们保持代码的灵活性、可读性和可维护性。 装饰者模式的核心思想是...

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

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

    c# ,设计模式,装饰者模式,星巴兹咖啡

    装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...

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

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

    设计模式-装饰者模式

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

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    23种设计模式详解PDF

    设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): 工厂方法模式 、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式(7): 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、...

    软件设计模式之装饰模式讲解

    软件设计模式之装饰模式讲解ppt,可用于教学课件。

Global site tag (gtag.js) - Google Analytics