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

设计模式-装饰器模式(Decorator)

 
阅读更多

1.意图

动态地给一个对象添加一些额外的功能.

2.适用性

  • 动态、透明的方式给单个对象添加职责。

  • 如果不适合适用子类来进行扩展的时候,可以考虑适用装饰模式。

  • 避免子类数目爆炸性增长。

3.结构

装饰模式结构

4.参与者

  • Component: 定义一个对象接口,可以给这些对象动态地添加职责.
  • ConcreteComponent: 定义一个对象,可以给这个对象添加职责.
  • Decorator: 持有一个指向Component对象的引用,并定义一个与Component的接口一致的接口.
  • ConcreteComponent: 向组件添加职责.

5.效果

1)优点:

  • 比静态继承更灵活.
  • 避免在层次结果高层的类有太多的特征.

2)缺点:

  • 产生许多小对象,增加对象复杂度,不易排错.

6.模式应用

  • Java中的I/O流
  • 面向切面编程AOP(思想相似)

7.实例

1)场景

一个软件公司由员工Employee组成,员工又分为开发人员Dev、领导Leader、经理Manager、QA部门领导QALeader。Dev职责是开发代码;QALeader职责不但能开发代码,而且能设计测试案例,写测试报告;Manager职责还能开发框架,发布版本。

2)UML图

UML图

3)代码

Employee


public abstract class Employee {
    public abstract void doSomething();
}

Dev


public class Dev extends Employee {
    @Override
    public void doSomething() {
        // TODO Auto-generated method stub
        writeCode();
    }
    private void writeCode() {
        // TODO Auto-generated method stub
        System.out.println("I'm a programer,complete the code!");
        System.out.println("---------------------------------------");
    }
}

Leader


public abstract class Leader extends Employee {
    private Employee person;
    public Leader(Employee person) {
        super();
        this.person = person;
    }
    @Override
    public void doSomething() {
        person.doSomething();
    }
}

Manager


public class Manager extends Leader {
    public Manager(Employee person) {
        super(person);
        // TODO Auto-generated constructor stub
    }
    public  void doSomething(){
        begin();
        super.doSomething();
        end();
    }
    private void begin() {
        // TODO Auto-generated method stub
        System.out.println("Design the framework!");
        System.out.println("---------------------------------------");
    }
    private void end() {
        // TODO Auto-generated method stub
        System.out.println("Release the verion!");
        System.out.println("---------------------------------------");
    }
}

QALeader


public class QALeader extends Leader {
    public QALeader(Employee person){
        super(person);
    }

    @Override
    public void doSomething() {
        // TODO Auto-generated method stub
        begin();
        super.doSomething();
        end();
    }
    private void end() {
        // TODO Auto-generated method stub
        System.out.println("Write the test reporter");
        System.out.println("---------------------------------------");
    }
    private void begin() {
        // TODO Auto-generated method stub
        System.out.println("Write the test cases!");
        System.out.println("---------------------------------------");
    }
}

输出结果:

========leader1 doSomething==========

Write the test cases!
—————————————
I’m a programer,complete the code!
—————————————
Write the test reporter
—————————————
========leader2 doSomething==========
Design the framework!
—————————————
Write the test cases!
—————————————
I’m a programer,complete the code!
—————————————
Write the test reporter
—————————————
Release the verion!
—————————————

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

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

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

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

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

    设计模式-装饰器模式

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

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

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

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

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

    9.设计模式-装饰器模式1

    装饰器模式(Decorator Pattern)是一种结构型设计模式,它的核心思想是在不修改原有对象的前提下,通过包装(包裹)原对象并扩展其行为来增加功能。这种模式常用于在运行时动态地给对象添加新的职责,使得系统具有...

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

    1. **组件(Component)**:定义了对象的接口,也就是所有被装饰对象和装饰器对象必须共同遵循的公共行为。这个接口使得装饰者和被装饰的对象可以互换,实现了无缝对接。 2. **具体组件(Concrete Component)**:...

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

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

    jouryfirst#weekly-1#175.精读《设计模式 - Decorator 装饰器模式》1

    “就增加功能来说,Decorator 模式相比生成子类更为灵活” 这句话的含义是,组合比继承更灵活,当可拓展的功能很多时,继承方案会产生大量的子类,而组合可以提

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

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

    设计模式--装饰模式

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

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

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法...装饰模式(Decorator Pattern)、迭代器模式(Iterator Pattern)、组合模式(Composite Pattern)、观察者模式(Observer Pattern)、责任链...

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

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

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

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

    PHP5设计模式-装饰者模式

    4. **具体装饰器(Concrete Decorator)**:这些类是装饰器的具体实现,它们在不改变具体组件原有行为的基础上,增加额外的功能。 ### 二、装饰者模式的PHP实现 在PHP中,我们可以通过以下步骤实现装饰者模式: 1...

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。 - 享元模式(Flyweight):使用共享对象,有效地支持大量细粒度的对象。 3. **行为型模式**:这类模式关注对象之间的责任分配。 - 责任链模式...

    c++-设计模式之装饰模式(Decorator)

    装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...

Global site tag (gtag.js) - Google Analytics