设计模式之Decorator与Strategy

最近在学习design pattern.在看完Decorator与Strategy之后,产生了一个疑问,两者之间的区别和联系是什么?

Decorator与Strategy都实现了多态。而其最重要的一点是Decorator的多态是基于具体对象。

比如我们定义一个“人“这样的类,人刚生下来时,除了吃喝拉撒什么都不会,后来才会走,会说话,会听,会写。

Men * A =new DecoratorTalk( new DecoratorWalk(new Men()));

这样A是一个会走会说的人。如果定义一个哑巴,则是

Men * B = new DecoratorWalk(new Men());

这就是Decorator模式,把Object的功能通过Decorator加上去.


而strategy更着重于对某一个功能的实现不同。同样是”运动“,不同动物表现出来的不同。鸟飞鱼游。这也是为什么

strategy可以由Template来替换的原因(这里先不考虑两者的优缺点)。


Decorator也可以 通过静态继承,或者strategy模式来实现。但是不同的组合会产生不同的子类。就如"人"的例子,瘫痪会说会写会听不会走,哑巴会写会听会走不会说,文盲会走会说会听不会写,幼儿只会听说,不会走等等等等。如果每种组合都成一个子类,则会很复杂。这里只定义一个"人”,根据具体对象,把不同功能加上去,就是Decorator.


理解错误的地方,还请大家指正


发布了50 篇原创文章 · 获赞 10 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/l_z_s_001/article/details/41748375