前言
首先给大家讲一个小故事,从前有一个小红,长的不是特别漂亮,所以他每天都靠化妆来维持自己的眉毛,或者靠美图秀秀(哈哈哈哈)但是在她心里一直有一个特别喜欢的男生,这个男生每次出现的时候都是穿着白衬衫,站在阳光底下,白皙的皮肤,高高的个子,利索的头型,(ps我想象的啊,哈哈哈),由于小女孩特别的羞涩,所以一直不敢表白,一直通过自己的闺蜜向男孩送礼物。(这个故事没有结局,可在留言自己写下结局。哈哈哈哈)
(如有异同请指出)
内容
通过刚刚讲的故事,我来为大家简述关于什么是装饰模式,由于小红不漂亮,所以他一直通过化妆和美图来对自己进行装饰,化妆和美图就是装饰模式的具体实现方法,在小红化妆的过程中他自动扩展自己化妆的工具用品,也就是为了包裹真实的自己。
装饰模式UML
代理模式
由于小红特别的害羞所以送礼物的时候一直都是通过自己朋友来传送里物,在这里小红的朋友变就是代理,如果想具体了解,可点击代理模式
代理模式
UML图
相似与区别
相似之处
对装饰模式来说,装饰者和被装饰者都实现同一个接口;对代理模式来说,代理类和真实处理的类都实现同一个接口
他们都属于是结构型模式,结构模式型的定义是:采用继承机制和来组合接口和实现,结构型对象模式采用组合聚合来组合对象实现新功能,可以在运行时刻改变对象组合关系,具有更大灵活性
功能区别:
装饰模式:从功能上看:再不改变接口的前提下,动态扩张对象的功能,不但有继承而且可以有聚合
代理模式:在不改变接口的前提下,控制对象的访问,直接对代理的类访问
装饰模式强调的是可扩展,A对象的B方法,在调用B方法的时后,会实现新的功能,效果会与原来不一样,只有继承
代理模式:在调用B方法前后,控制怎么访问B方法的原始数据,而对于B实现的功能效果不能做修改,应该他是代理,原数据没有改,那么代理就更不能改了。
其实,它们的着重点一个在于“增加”职责,另一个在于“控制”访问。这是它们最本质的区别。
代码区别:
装饰模式跟代理模式代码的最大的在于他们的构造方法,代理模式的构造方法不传参数,在构造方法内部完成参数传递,装饰模式将装饰的对象作为参数传进去。