Spring设计模式之装饰器模式

http://baijiahao.baidu.com/s?id=1583400270221855830&wfr=spider&for=pc

 

装饰器模式

前言

假设有这么一种情景,有两个程序员,一个Java、一个Python,都只负责一件事:编程。突然有一天,领导要求,在编程之前要做设计,在编程之后要进行测试。

大家最先想到的,肯定就是要求这两个程序员各自在"编程"这个方法前后加上"设计"、"测试"的功能。但是在编程中违反了"开闭原则",程序员原来的"编程"这个方法运行的很好,不要动他(修改关闭),但是你可以另找人来实现新的功能(扩展开放)。我们用代码实现一下。

实现

程序员接口:

接口

实现类:

实现类1

实现类2

如果我们需要设计和测试功能,首先想到的就是在这两个类里面加代码,这样就违反了开闭原则。我们用装饰器模式来实现。

装饰器静态类:

静态类

子类:

装饰器1

装饰器2

测试结果:

测试

扩展

看到这,一定会有人说,装饰器模式和代理模式、适配器模式、模板方法模式看起来好像啊,有什么区别么?

装饰器:原来的方法(编码)已经不能满足新需求了,需要对其进行扩展(设计、测试),理论上我们可以对原方法无限地装饰下去,比如我们可以在"设计"之前再加个"需求分析",在"测试"之后再加个"部署实施"等等。也可以去掉某些装饰器。

适配器:原来的接口已经不兼容了,适配器在原对象和目标对象中间,通过对原对象兼容的那个接口,通过转换,调用目标对象那个不兼容的接口。举个不恰当的例子,一个英国人去买饭,听不懂中国服务员说什么(接口不兼容),这时候来了一个翻译(适配器),他能与英国人交流(接口适配成功),然后翻译不干活,而是通过中国服务员的活动,将结果再返回给英国人。

代理:你们要实现什么功能我不管,我只负责调用该调用的方法。有点类似前台MM,你们干什么我不管,你就告诉我你找谁,我给你找去。

模板方法:如果说装饰器是在原有的方法上扩展很多方法,那么模板方法模式就是将原来很多固定的方法抽出到父类里。一个是加法,一个是减法

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值