期末考期间实在无聊,不想看那些本学期无聊的课程,随便应付下能过的,于是坐在图书馆,书架上抓了本《Head First: Design Pattern》
先说这确实是本好书,不愧是JOLT大奖得主,O'RELLY出品,必属精品(虽然这句话是用来形容暴雪的),但书中那样趣味的写法和图示一扫我之前对设计模式的理解障碍。之前看的那些图书,你必定有一定的OO代码编写经验,而且一个个枯燥的类图,你根本无法记住何时需要引入这些模式,以及不同模式间的区别,现在好了,有了“Head First”,看一遍,抵过去看五遍(哇咔咔咔咔咔咔)。。。
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
分享到:
相关推荐
在软件设计模式的世界里,Java 语言提供了丰富的工具来实现各种设计模式,如标题和描述中提到的策略模式、工厂模式以及桥接模式。这些模式是面向对象设计的重要组成部分,帮助开发者解决复杂的问题,提高代码的灵活...
这个压缩包文件“设计模式之_Strategy_00_源码与文档.rar”包含了关于Strategy模式的源码实现和相关文档,便于深入理解和学习。 Strategy模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互...
在“一个strategy模式的例子.rar_strategy_设计模式”这个压缩包中,包含了两个关键文件,一个是“www.pudn.com.txt”,可能是相关资料链接或介绍,另一个是“strategy”,可能是一个具体的策略模式实现代码。...
创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4.... 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间来改变算法的情况。策略模式就是为了解决这类问题而诞生的,它将每种算法封装到具有共同接口的...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Template Method、iterator、Composite、State、proxy。最后三章比较...
这份名为"设计模式_20091017.rar"的压缩包文件,很可能包含了一份关于设计模式的详细教程或参考材料,例如"设计模式_20091017.pdf"这个文档。 设计模式并不是一种具体的代码或库,而是一种经过验证的、可复用的设计...
在软件设计领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的设计问题。行为模式是设计模式的一个重要分支,主要关注对象之间的交互和责任分配。这类模式涉及到系统的行为和控制流程,帮助开发者更...
3. 行为型设计模式:关注对象间的交互和责任分配,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、备忘录模式(Memento)、状态...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。这些模式经过时间的考验,被广泛应用于各种面向对象的编程语言中,包括C++。"设计模式_可复用面向对象软件的基础__C++版设计模式...
Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的模板。这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式...
策略模式是设计模式中的一种行为模式,它在Java编程中被广泛应用,特别是在处理算法多样化或需要灵活替换不同行为的场景下。策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让...
1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
《Head First 设计模式》是一本非常受欢迎的软件开发书籍,它深入浅出地介绍了设计模式这一编程领域的核心概念。设计模式是经验丰富的开发者在解决常见问题时所采用的经过验证的最佳实践。这些模式提供了可复用的...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C#中,策略模式经常被用来解决复杂的问题,特别是在需要动态切换算法或行为的场景下。它通过将算法封装到具有独立接口的类中,使得算法可以互相替换...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间来改变算法的情况。策略模式就是为了解决这类问题而诞生的,它将每种算法封装到具有共同接口的...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。设计模式并不是具体的代码或库,而是一种通用解决方案的描述,适用于面向对象编程中遇到的各种复杂设计挑战。这些模式经过时间的...
在策略模式(Strategy ...这种类型的设计模式属于行为型模式。 策略模式java-demo 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法