浅析设计模式之策略模式—:为什么总是继承[2]

发表于:2009-11-03来源:作者:点击数: 标签:设计继承模式浅析
浅析设计模式之策略模式—:为什么总是继承[2] uml模型 关键字:uml 重复的代码确实减少了很多,但是还有一些重复(心里在默默的骂道:TMD,为什么C#不支持多继承,不然我就可以消除重复了),也许你还在自我陶醉的欣赏着自己多么完美的类继承层次,在那里感

浅析设计模式之策略模式—:为什么总是继承[2]  uml模型

关键字:uml

    重复的代码确实减少了很多,但是还有一些重复(心里在默默的骂道:TMD,为什么C#不支持多继承,不然我就可以消除重复了),也许你还在自我陶醉的欣赏着自己多么完美的类继承层次,在那里感慨OO的强大。但是随着具体的高校越来越多,而且有的高校的报到步骤居然要发生改变,你小心的在中间那一层添加新的类,并将一些高校的实现转移,每一次你都非常小心(这个系统正在高速的运转,每改错一步,就有多少莘莘学子入不了学)。你心里终于对OO不满起来:为什么,为什么大家都说OO是救世主,但是却救不了我。答案是因为你将OO的设计原则遗忘在课本里了。开闭原则、优先使用组合,你还记得吗?

    在我们很多OO程序员的脑子里总是存在这样一个观念:没有继承的程序不是OO的程序,看到重复总是想到继承。当初我也是这样想的,有的时候看到自己画的庞大的继承类图,心里在乐呵呵的笑。可继承总是不给面子,一个小小的变化就将这个看似稳定的体系弄的支离破碎。

    还是回到我们的例子,在这个例子中变化的是各高校的报到步骤,本着发现变化、封装变化、隔离变化的原则我们将报到的步骤分离出来,独立成类。

    这样我们就可以复用这些步骤了,有新的步骤实现只要添加更多的子类,并不需要修改原来的代码。(作业:在继续阅读之前根据上面的类图自己写出实现的代码来)这就是所谓的策略设计模式:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于算法的客户(DP)。

    策略模式有三种参与者:

    一、 Context 这个类保存了对策略的引用,并且调用实际的策略实现,有可能还提供一个接口,让策略可以访问它内部的数据,在这里就是我们的“高校”类。

原文转自:http://www.ltesting.net