首先你要对这二种模式有一定的了解(具体略)
用一句话来解释:同样是学剑的,一个用来维护正义,一个用来杀人自乐
1,相同点:具有相同的结构和思想
a,实现同一个接口的两个类:主体和辅助
b,使用时将主体类对象传入辅助类中进行操作
2,不同点:
a,出发点不同:
装饰模式存在的意义在于:
1,对继承的另类实现,避免继承出现的内生性问题(改变父类的一些实现会对子类造成毁灭性影响),辅助类同样能“继承”主体类的功能,且,主体类内部改变不会对辅助类造成影响;
2,增强主体类的功能,辅助类好像是一个具有不同功能的“壳”,主体穿不同的“壳”就能就有不同额外的能力,而且还可以穿多层“壳”,具有多重“能力组合”
3,辅助类对主体类只有增强,而不能进行控制
代理模式存在的意义在于:
主体类只是辅助类的一个工具,辅助类以自我实现为主,对主体类具有绝对的控制权(决定其是否执行、改变其执行结果、替换其执行逻辑),李代桃僵,反客为主,通过对主体类绝对的控制达到自己的目的;
b,用法差异:不同的目的决定了二者在应用上的差别
1,装饰模式必须让主体类的方法得以执行,自己以增强主体类功能为目的;且可以造不同的壳,多个壳可以组合使用;不仅可以实现同个接口,壳们还可以继承同一个类
2,代理模式要让主体类作为自己的附属,对外将其隐藏,对内将其任意处置,并使自己作为“真身”曝光出去;