装饰(Decorator)模式
大家对装饰模式了解么?看了这个模式后有点模糊,请明白人指教!
我对装饰模式的理解:
具体装饰角色通过抽象接口和具体构件角色形成关联,具体装饰角色通过修改和扩展具体构件角色的行为来达到对具体构件角色的扩展! 感觉这个和继承差不多阿,那为什么装饰模式更好呢?
我看一本书上说:装饰模式允许系统动态地决定增加一个需要的装饰或者去掉一个不需要的装饰,而继承却不能,何以理解?
[解决办法]
不好意思,我的上个理解也不准确。
事实上装饰模式是把各种装饰单独做成一个类,某个类需要其中的几种就直接通过修饰类叠加即可实现,而避免了因为需要不同种装饰而建立不同个子类的情形。
[解决办法]
恩,比如设计100个类要用到5个装饰,如果用装饰模式,只要一个业务类和5个装饰类。客户程序(第7个类)可以动态的为业务类叠加5个装饰的任意个,和任意种叠加方式。
客户程序可以通过条件逻辑来决定叠加策略,这就是动态!
而如果你设计了100个类,那你实际上做的事情就是在编译期罗列了100种叠加!就是不动态的!