![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
||||||
| 设计模式_STRATEGY | ||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-9-2 ![]() |
||||||
|
期末考期间实在无聊,不想看那些本学期无聊的课程,随便应付下能过的,于是坐在图书馆,书架上抓了本《Head First: Design Pattern》 先说这确实是本好书,不愧是JOLT大奖得主,O'RELLY出品,必属精品(虽然这句话是用来形容暴雪的),但书中那样趣味的写法和图示一扫我之前对设计模式的理解障碍。
OK,不乱侃了。偶不过才看了50多页的书,理解完了STRATEGY模式: 原书使用JAVA描述,所以此处也使用JAVA的术语,书中描绘了一个DUCK实例,举出了使用传统的继承方式所产生的弊端:主要是没个子类有各自的方法,当有许多类时,代码将难以维护。 OK,随后是使用STRATEGY模式的例子:保留原有的基类和继承的方式,超类中包含具有相同实现的行为,子类继承超类,可选择性地对这些行为进行修改。而对于那些在不同子类中具有不同实现的行为,对其定义接口,定义对行为具体实现的类(类中implement此接口,并仅包含对特定方法的实现)。这样,超类中将包含这些需要的接口,在子类初始化时,将初始这些接口,指定其指向的类。 书中例子的类图:
例子中,DUCK超类拥有公有的行为:fly()、quack()、display()。拥有两个接口成员:QuackBehavior、FlyBehavior。FlyBeahvior作为接口,有其实现的具体类如:FlyWithWings,FlyNoWay(你也可以实现自定义的其它Fly行为,只需实现此接口即可)。QuackBehavior与FlyBehavior类似。OK,现在每一个特殊的行为实现都模块话了,在你定义子类时,只要把这个模块拉进来就行了。 STRATEGY模式的最大优点是代码的高重用性,以及以此带来的易维护性。当你对对每个具体方法使用接口和类进行封装后,当你想再次使用此方法时,你只要包含实现此方法的类就可以了。而当你要对某一方法进行修改时,只需对实现此方法的类进行修改,也就能修改到全部了。程序员的“八荣八耻”里不是说了吗,我们要以“以代码重用为荣,以复制粘贴为耻;”,咔咔~ PS:(1)关于STRATEGY模式还有一个较好的介绍:Gossip的STRATEGY模式 (2)本文的图来自2007年软件设计师考试下午第七题 (3)偶素大菜鸟,文中有啥错误,请您指出偶的错误,THX 本文来源:http://blog.csdn.net/miracle9i/archive/2007/07/13/1688715.aspx
|
||||||
| 文章录入:admin 责任编辑:admin | ||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|