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

装饰者模式

 
阅读更多

 

装饰者模式

Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。

意图:

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

设计原则:

1. 多用组合,少用继承。

利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。然而,如果能够利用组合的做法扩展对象的行为,就可以在运行时动态地进行扩展。

2. 类应设计的对扩展开放,对修改关闭。

要点:

1. 装饰者和被装饰对象有相同的超类型。

2. 可以用一个或多个装饰者包装一个对象。

3. 装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的。

4. 对象可以在任何时候被装饰,所以可以在运行时动态的,不限量的用你喜欢的装饰者来装饰对象。

5. 装饰模式中使用继承的关键是想达到装饰者和被装饰对象的类型匹配,而不是获得其行为。

6. 装饰者一般对组件的客户是透明的,除非客户程序依赖于组件的具体类型。在实际项目中可以根据需要为装饰者添加新的行为,做到“半透明”装饰者。

7. 适配器模式的用意是改变对象的接口而不一定改变对象的性能,而装饰模式的用意是保持接口并增加对象的职责。

实现原理:


 

具体实现举例:

1、存在一个MyComponent接口,其中有一个方法实现控制台打印功能;

public interface MyComponent {
    public void printMsessage();
}

 

2、MyComponent的一个具体实现;

public class MyPrintComponent implements MyComponent {
    public void printMsessage() {
       System.out.println("myComponentImpl has done!");
    }
}

3、现在对上述的实现类进行修饰,首先定义一个修饰类MyDecorator ,这个类实现了相同的接口并持有对MyComponent的引用;

public class MyDecorator implements MyComponent {

    private MyComponent myComponent;

    public void setMyComponent(MyComponent myComponent) {
        this.myComponent = myComponent;
    }

    public void printMsessage() {
        this.myComponent.printMsessage();
    }
}
 

4、对MyPrintComponent的具体修饰类,在这个修饰类中对MyDecorator持有的MyComponent引用赋值,指向要修饰的具体的类;

public class MyPrintDecorator extends MyDecorator {
    
    public MyPrintDecorator(){
        super.setMyComponent(new MyPrintComponent());
    }
    
    public void printMsessage(){
        this.beforeBehavior();
        super.printMsessage();
        this.afterBehavior();
    }
    
    private void beforeBehavior(){
        System.out.println("MyPrintDecorator is start!");
    }
    
    private void afterBehavior(){
        System.out.println("MyPrintDecorator is end!");
    }

}
 

5、测试代码

public class TestDecorator {
    
    public static void main(String[] args) {

        //不使用修饰类
        MyPrintComponent print1 = new MyPrintComponent();
        print1.printMsessage();
        
        System.out.println("\nuse decotator, then\n");
        
        //使用修饰类
        MyPrintDecorator print2 = new MyPrintDecorator();
        print2.printMsessage();
    }

}
 

输出的结果为:

myComponentImpl has done!


use decotator, then


MyPrintDecorator is start!

myComponentImpl has done!

MyPrintDecorator is end!

 

至此,本文对装饰模式的基本原理进行了基本的实现,从实际应用加深了对修饰模式的理解!

 

参考:http://www.cnblogs.com/god_bless_you/archive/2010/06/10/1755212.html

 

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

相关推荐

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

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

    装饰者模式Demo

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

    装饰者模式Android实例

    装饰者模式是设计模式的一种,属于结构型模式,它的主要目的是动态地给对象添加新的行为或职责,而无需改变对象的原始代码。在Android开发中,装饰者模式的应用相当广泛,尤其是在视图组件的扩展和功能增强上。下面...

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

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

    java装饰者模式实现

    装饰者模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时动态地给对象添加新的职责,而不必修改原有代码,遵循“开闭原则”。在Java中,装饰者模式通常通过继承和组合来实现,尤其适用于那些...

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

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

    设计模式的装饰者模式的例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有的代码。这种模式遵循开闭原则,即对扩展开放,对修改关闭,使得我们可以在不改变对象原有结构的情况下,通过...

    Qt设计模式之装饰者模式

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

    装饰者模式 C++ 实现

    装饰者模式是一种设计模式,它允许我们向一个对象动态地添加新的行为或责任,而无需修改对象本身的代码。在C++中实现装饰者模式,我们可以遵循以下步骤和关键概念: 1. **定义接口**:首先,我们需要定义一个基础...

    装饰者模式demo

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有的代码。这种模式遵循开闭原则,即对扩展开放,对修改关闭,使得我们的系统更加灵活,易于维护和扩展。 装饰...

    装饰者模式案例学习代码

    装饰者模式是一种结构型设计模式,它允许在不修改对象本身的情况下动态地为对象添加新的行为和职责。这种模式在软件工程中广泛应用,因为它提供了一种灵活的方式来扩展对象的功能,而不会破坏其原有的结构。在Java、...

    装饰者模式的典型应用。

    装饰者模式是设计模式中的一种结构型模式,它在不改变对象原有行为的基础上,动态地为对象添加新的功能。这种模式常被用于扩展或增强对象的功能,而无需修改原对象的代码,符合“开闭原则”。在Java的SSL(Secure ...

    Headfirst(三)装饰者模式C++实现

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这种模式在C++中的应用尤为广泛,因为它提供了灵活性,能够扩展对象的功能,同时保持代码的可读性和可维护性。 ...

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

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

    装饰者模式代码demo

    装饰者模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这种模式通过将对象包装在一个装饰类中来实现,装饰类与原类有相同的接口,因此可以透明地替换或增强原有对象的...

    游戏设计3-装饰者模式-装备

    装饰者模式是面向对象设计中的一种行为设计模式,它允许在运行时动态地给对象添加新的职责或行为,而无需改变对象本身。在游戏设计中,装饰者模式常常被用来扩展角色、装备等对象的功能,使得游戏内容更加丰富且易于...

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

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

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

    装饰者模式是面向对象设计中的一种经典模式,它在不修改已有对象的源代码或继承体系的情况下,通过组合的方式动态地给对象添加新的行为或职责。这种模式在实际开发中非常常见,尤其在需要灵活扩展功能,而又不想破坏...

Global site tag (gtag.js) - Google Analytics