大话设计模式(五)之装饰者模式

原创 2018年04月15日 16:02:28

装饰者模式:动态的给一个对象添加一些额外的职责,就添加功能来说,装饰者模式比单纯的生成子类更加灵活。

这里首先举例一个场景,一个主功能和多个辅功能结合一起实现一个功能。

类图如下:


大概讲解一下,就是说首先定义一个统一接口,

而后定义多个(或一个)主功能,这里只是定义了一个KeyComponent,可以添加多个,实现本身功能。

然后定义一个抽象类,是所有辅功能的父类,在里面定义变量component,并写出变量的get,set方法。

最后定义具体辅功能的实现类,重写功能方法,并在实现方法后实现主功能的方法。

具体代码如下:

服务端:

public abstract class Component {
    abstract void show();
}
public class KeyComponent extends Component{

    @Override
    void show() {
        System.out.println("Key Class");
    }
}
public abstract class Decorator extends Component {
    protected Component component;

    public void setComponent(Component component) {
        this.component = component;
    }

    @Override
    void show() {
        component.show();
    }
}
public class DecoratorA extends Decorator{
    @Override
    public void show(){
        System.out.println("DecoratorA");
        component.show();
    }
}
public class DecoratorB extends Decorator{
    @Override
    public void show() {
        System.out.println("DecoratorB");
        component.show();
    }
}

客户端:

public class DecoratorTest {
    public static void main(String[] args){
        KeyComponent keyComponent=new KeyComponent();
        DecoratorA decoratorA=new DecoratorA();
        DecoratorB decoratorB=new DecoratorB();
        decoratorA.setComponent(keyComponent);
        decoratorB.setComponent(decoratorA);
        decoratorB.show();
    }
}

装饰的方法是:首先利用KeyComponent实例化对象keyComponent, 然后利用实例化的对象DecoratorA和DecoratorB来包装keyComponent,最后执行最终的装饰对象DecoratorB的show方法。

总结:

装饰者模式就是把类的核心职责(主要功能)和装饰职责(辅功能)区分开来实现,这样我们可以动态的去除或添加功能实现,实现动态修改功能职责的问题,而且这样还可以抽离出来辅助功能的重复代码。

<三>读<<大话设计模式>>之装饰模式

学习这个模式比前几个要难点了,搞了半天才弄懂。好吧,也许是我脑子慢        装饰者模式:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是...
  • jzhf2012
  • jzhf2012
  • 2014-10-27 14:06:35
  • 1742

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

1 什么是装饰者模式装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰着提供了比继承更有弹性的替代方案。这虽然说明了装饰着模式的“角色”,但是没说明怎么在我们的实现中实际应用它,下面举一个...
  • gusgao
  • gusgao
  • 2016-08-10 17:35:44
  • 301

大话设计模式——装饰者模式(总结)

1、装饰者模式的一般应用场景:     当系统增加新的功能,需要给类增加新的功能,而这些新的功能又主要是为了修饰原来类中的核心职责或者功能,也就是说,这些新的功能是用来修饰的,而且这些用来修饰的功能...
  • doumengyuancsdn
  • doumengyuancsdn
  • 2017-09-26 08:46:48
  • 99

大话设计模式C++实现-第6章-装饰模式

一、UML图 二、概念 装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 三、说明 角色: (1)Component是定义一个对象,可以给这些对象动态地添...
  • XD_lixin
  • XD_lixin
  • 2014-12-11 15:16:06
  • 1658

大话设计模式学习(一)----装饰模式

大话设计模式学习(三)—-装饰模式C++实现 前面还有简单工厂模式和策略模式,今天先记录装饰模式 一、装饰模式介绍 注意这里面涉及到的设计原则 开放-封闭原则(OCP) Sof...
  • u012341163
  • u012341163
  • 2016-03-16 16:34:43
  • 353

大话设计模式-装饰者模式C#与Java对比存在的问题

最近看了大话设计模式书中的装饰者模式,然后用C#照着写了一遍,发现运行出来的结果和书上不一样,然后又用Java写了一遍 和书上一样,同样的代码,不同的编译器与运行环境,Java和.NET 下面贴上...
  • xiaoyiyz
  • xiaoyiyz
  • 2015-06-28 21:39:53
  • 848

Java:一夜一发设计模式(一)------装饰者模式

一,什么时候使用装饰者模式?比如有一家店卖饮品,饮品就有不少种,每一种还可以加项,比如给可乐加冰,加糖,兑水什么的,每次加项的价格还不同,就会将代码弄的很繁琐,这种情况下就可以使用装饰者模式来实现. ...
  • android_zyf
  • android_zyf
  • 2017-03-30 01:53:36
  • 749

Head First设计模式:(三)装饰者模式

星巴兹咖啡准备更新订单系统,以合乎他们的饮料供应需求。 他们原先的类设计为: 这样的订单系统没有办法考虑到咖啡调料的部分,把加入不同调料的咖啡看做不同的类会导致类爆炸(每个类的cost方法计算...
  • lissdy
  • lissdy
  • 2012-05-06 19:31:09
  • 3155

大话设计模式[中文PDF+源代码]

下载地址:http://feixueteam.net/thread-493-1-1.html
  • u013948190
  • u013948190
  • 2016-01-05 17:13:18
  • 8150

学习、探究Java设计模式——装饰者模式

定义装饰者模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。设计原则要使用装饰者模式,需要满...
  • a553181867
  • a553181867
  • 2016-08-03 22:52:44
  • 5495
收藏助手
不良信息举报
您举报文章:大话设计模式(五)之装饰者模式
举报原因:
原因补充:

(最多只允许输入30个字)