装饰模式与代理模式对比

首先你要对这二种模式有一定的了解(具体略)

用一句话来解释:同样是学剑的,一个用来维护正义,一个用来杀人自乐

1,相同点:具有相同的结构和思想

a,实现同一个接口的两个类:主体和辅助

b,使用时将主体类对象传入辅助类中进行操作

2,不同点:

a,出发点不同:

装饰模式存在的意义在于:

        1,对继承的另类实现,避免继承出现的内生性问题(改变父类的一些实现会对子类造成毁灭性影响),辅助类同样能“继承”主体类的功能,且,主体类内部改变不会对辅助类造成影响;

        2,增强主体类的功能,辅助类好像是一个具有不同功能的“壳”,主体穿不同的“壳”就能就有不同额外的能力,而且还可以穿多层“壳”,具有多重“能力组合”

        3,辅助类对主体类只有增强,而不能进行控制

代理模式存在的意义在于:

        主体类只是辅助类的一个工具,辅助类以自我实现为主,对主体类具有绝对的控制权(决定其是否执行、改变其执行结果、替换其执行逻辑),李代桃僵,反客为主,通过对主体类绝对的控制达到自己的目的;

b,用法差异:不同的目的决定了二者在应用上的差别

        1,装饰模式必须让主体类的方法得以执行,自己以增强主体类功能为目的;且可以造不同的壳,多个壳可以组合使用;不仅可以实现同个接口,壳们还可以继承同一个类

        2,代理模式要让主体类作为自己的附属,对外将其隐藏,对内将其任意处置,并使自己作为“真身”曝光出去;

你可能感兴趣的:(装饰模式与代理模式对比)