`

设计模式之装饰者模式

阅读更多

        装饰者模式又叫包装模式,定义如下:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类来说更为灵活。

 



 

装饰者模式的类图如上:

从图中可以看到装饰着模式涉及到四个角色:

1.抽象构件角色Component

Component可以是一个接口或者抽象类,主要是定义一些规则

2.具体构件角色ConcreteComponent

ConcreteComponent是抽象构件的实现类同时也是被装饰的对象

3.Decorator抽象装饰者角色

一般是一个抽象者对象,同时实现抽象构件角色中定义的功能,并且含有一个私有属性执行抽象构件

4.具体装饰者角色

主要是用来装饰具体构件角色

 

/**
 * 抽象构件
 * 
 */
public abstract class Component {

    // 抽象方法
    protected abstract void operation();
}

 

/**
 * 具体构件
 * 
 */
public class ConcreteComponent extends Component {

    /**
     * 
     */
    @Override
    protected void operation() {

        System.out.println("Hello World!");
    }

}

 

public abstract class Decorator extends Component {

    private Component component;

    public Decorator(Component component) {

        this.component = component;
    }

    /**
     * 
     */
    @Override
    protected void operation() {

        component.operation();
    }

}

 

public class ConcreteDecorator extends Decorator {

    /**
     * @param component
     */
    public ConcreteDecorator(Component component) {
        super(component);
    }

    // 装饰方法
    private void doSomething() {

        System.out.println("装饰");
    }

    @Override
    protected void operation() {
        doSomething();
        super.operation();
    }

}

 

public class Client {

    public static void main(String[] args) {
        
        //被装饰者
        Component component=new ConcreteComponent();
        
        //装饰者
        Decorator decorator=new ConcreteDecorator(component);
        
        //装饰
        decorator.operation();
                
    }
}

 

        看完装饰模式大家可能会有一些疑问,不就是要重新扩张一个方法的功能吗?我直接集成具体构件类重写里面的方法不就行了吗?其实装饰者模式是继承关系的一种替代方案,集成是一种高侵入性的,况且我们做开发的也知道,需求是无止境的,你根本不知道用户的需求最终会变成什么样,也许有一天需求变了,那么你难道还要再次集成然后重写里面的方法吗?

 

装饰者模式的优点:

1.装饰类和被装饰的对象可以独立发展不必互相耦合

2.装饰者模式是继承关系的一种替代

 

当然装饰者模式也是有缺点的,那就是装饰者的实现类可能会出现类膨胀的情况的,所以是否需要使用装饰者模式就要看具体的情况了。

 

装饰的使用场景

1.需要扩展一个类的功能或给一个类增加附加功能

2.需要动态的给一个对象增加功能并且这些功能可以动态的撤销

3.需要为一批兄弟类进行改装或增加功能

 

相信大家都做过文件上传获取其他和IO相关的操作,其实java  IO中主要使用模式就是装饰者模式,大家可以想象上面的问题,如果为了增强一个类的功能我们就使用继承的话,那么java IO的实现如果使用继承一定会很可怕的.....

 

下面是一张java IO使用装饰者模式的简单类图:

 




 
 

  • 大小: 31.5 KB
  • 大小: 23.8 KB
分享到:
评论

相关推荐

    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种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

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

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

    24种设计模式以及混合设计模式

    创建型设计模式关注对象的创建过程,如单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)和建造者模式(Builder)。这些模式提供了一种灵活且可扩展的方式来创建和管理对象。 结构型...

Global site tag (gtag.js) - Google Analytics