1.Strategy设计模式主要是对对象行为的选择进行决策
先看一下定义吧
The Strategy Pattern: a famly of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
大概意思就是 有一系列算法,把他们每个算法都分别封装起来,使他们可以互相替换。策略模式可以让算法从客户端独立出来,算法的改变不会影响客户端
在网上很容易就可以古狗到策略模式的类图
每个算法都是一个具体的策略,图中ConcreteStrategyA,ConcreteStrategyB,ConcreteStrategyC为3 个具体的算法,Strategy模式就是把一组具体的算法(策略)分别封装起来,并把这些封装起来的算法实现共同的一个接口 Strategy ,这个接口就是一个抽象的策略,我们的主类中拥有一个抽象策略的引用声明为Strategy接口类型,所有具体算法们都实现了抽接口中的方法AlgorithmInterface (),由于多态,所以我们可在我们的主类里直接调用抽象接口的方法AlgorithmInterface() ,这样做的好处就是我们可以在run time时使用setter方法改变具体的策略而不影响到客户的代码。
测试代码:
package {
import flash.display.Sprite;
import net.nshen.designpatterns.strategy.*;
public class designpatterns extends Sprite
{
public function designpatterns()
{
Test_Strategy()
}
public function Test_Strategy():void{
var context:Context=new Context();
//设置策略
context.strategy=new ConcreteStrategyA()
context.ContextInterface()
//runtime 更改策略B
context.strategy=new ConcreteStrategyB()
context.ContextInterface()
//runtime 更改策略C
context.strategy=new ConcreteStrategyC()
context.ContextInterface()
}
}
}
Context:
* 需要使用ConcreteStrategy提供的算法。
* 内部维护一个Strategy的实例。
* 负责动态设置运行时Strategy具体的实现算法。
* 负责跟Strategy之间的交互和数据传递。
package net.nshen.designpatterns.strategy
{
public class Context
{
private var _strategy:IStrategy
public function set strategy(p_strategy:IStrategy):void{
this._strategy=p_strategy;
}
public function ContextInterface():void{
this._strategy.AlgorithmInterface()
}
}
}
Strategy(抽象策略类):
* 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。
package net.nshen.designpatterns.strategy
{
/**
*
*
* 抽象策略,可以为接口,也可以为一个抽象类,这里是接口
*
*/
public interface IStrategy
{
function AlgorithmInterface():void
}
}
ConcreteStrategy(具体策略类):
* 实现了Strategy定义的接口,提供具体的算法实现
具体策略A:
package net.nshen.designpatterns.strategy
{
public class ConcreteStrategyA implements IStrategy
{
public function AlgorithmInterface():void
{
trace("调用策略A")
}
}
}
具体策略B:
package net.nshen.designpatterns.strategy
{
public class ConcreteStrategyB implements IStrategy
{
public function AlgorithmInterface():void
{
trace("调用策略B")
}
}
}
具体策略C:
package net.nshen.designpatterns.strategy
{
public class ConcreteStrategyC implements IStrategy
{
public function AlgorithmInterface():void
{
trace("调用策略C")
}
}
}
完整代码点这里下载
在《head first design patterns》的例子中更把策略描述成行为(Behavior)的抽象,建议去看一下,由于各种各样的鸭子叫的方法和飞的方法各不相同,如下图,把鸭子的多种Fly行为和多种Quack行为独立出来,打包成两个策略包,分别实现两个抽象的接口FlyBehaviors 和 QuackBehaviors ,此时所有鸭子的父类Duck就是上面图中的Context,保存抽象策略的引用 flyBehavior , quackBehavior ,由于策略模式的好处,使得Duck的子类各种各样的鸭子可以run time选择自己相应的行为
=================理论与实践分割线=========================================================
分享到:
相关推荐
Java设计模式是面向对象编程领域中的重要概念,它是一套被广泛接受并实践的解决软件设计问题的经验总结。设计模式并非具体的代码或库,而是一种在特定情境下为了解决常见问题而制定的通用解决方案的描述。它们描述了...
### Java设计模式详解 #### 一、背景与概念 在软件工程领域,设计模式是一种用于解决常见问题的可重用解决方案。《Java设计模式PDF》是一本由James W. Cooper编写的经典书籍,该书详细介绍了Java编程语言中的设计...
《Java设计模式》是刘伟老师的一本经典教材,它深入浅出地讲解了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的通用解决方案,是软件开发中的智慧结晶。这本书的课后习题和...
《Java设计模式》课程设计报告主要探讨了如何利用Java编程语言和MyEclipse集成开发环境来实现基于设计模式的西瓜市场系统。这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为...
Java设计模式是软件工程中的一种最佳实践,它总结了在特定场景下解决常见问题的经验,为程序员提供了可重用的解决方案。本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与...
### Java设计模式(刘伟) #### 一、引言 在《Java设计模式》这本书中,作者刘伟全面地介绍了24种经典的设计模式,并通过丰富的案例和代码示例进行了详细的解析。本书不仅适合初学者作为入门教材,也适合有一定...
刘伟老师的《Java设计模式》课后答案PDF文件,包含了对书中各章节练习题的详细解答,这对于读者理解每个设计模式的实现和应用场景非常有帮助。通过学习这些答案,读者可以更好地巩固所学知识,将理论与实践相结合,...
Java设计模式是软件工程中的一种最佳实践,它提供了一套标准的解决方案,用于解决在编写可维护、可扩展和高效代码时经常遇到的问题。这些模式是经验丰富的开发者们在面对相似问题时,经过反复试验和优化后总结出的...
Java 设计模式,第二版,电子工业出版社出版 本书通过一个完整的Java项目对经典著作Design Patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为...
《Head First 设计模式》与《Java设计模式(第2版)》是两本非常重要的IT书籍,专注于软件开发中的设计模式。设计模式是解决软件设计中常见问题的经验总结,它们提供了一种标准的方法来处理特定场景下的问题,使得代码...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
这份名为"java设计模式PPT"的资料集合,包含了关于JAVA设计模式的书籍和PPT,对于不同水平的开发者都有很大的学习价值,无论是初学者还是希望深入理解JAVA开发模式的专业人士。 首先,我们要理解设计模式的核心概念...
阅读《Java设计模式(疯狂Java联盟版)》,读者将能够理解并熟练运用这些模式,从而编写出更加高效、优雅的Java代码,为软件项目的长期成功打下坚实基础。无论是初学者还是经验丰富的开发者,这本书都是深入理解和...
本电子书集合深入浅出地剖析了Java设计模式,旨在帮助开发者理解和应用这些模式,提升编程技能。 首先,让我们探讨“设计模式”的概念。设计模式并不是具体的代码或库,而是一种描述在特定编程环境中常见问题的最佳...
《深入浅出Java设计模式》是一本专注于Java编程领域中的设计模式专著,旨在帮助开发者深化对设计模式的理解,提高代码质量和可维护性。设计模式是软件开发中经过时间检验的解决方案,它们是解决常见问题的最佳实践。...
本资料“java设计模式学习”包含了对设计模式的深入理解和实际应用,通过简单实用的例子,帮助开发者掌握如何在Java项目中运用设计模式。 首先,我们要介绍的是工厂模式。工厂模式是一种创建型设计模式,它提供了一...
此外,为了确保参考资料的权威性,建议读者查阅原书《Java设计模式》以获得更加详尽的解释和说明。如果有任何意见或建议,可以通过提供的电子邮箱与作者联系。在学习设计模式的过程中,理解每一个模式的意图、结构、...
以下是对标题"Java设计模式相关书籍"及描述"设计模式之禅 深入浅出"中所包含的关键知识点的详细阐述。 1. **设计模式的分类** 设计模式通常分为三大类:创建型模式(Creational Patterns)、结构型模式...
根据描述,这份资料包含了多个部分,包括全英文的影印版、详细的解释以及理论性的DOC文档,为深入学习和理解Java设计模式提供了丰富的资源。 设计模式通常分为三类:创建型、结构型和行为型。创建型模式涉及到对象...
这份"java设计模式的上课ppt"很可能是对Java设计模式深入理解的一个教学资源,涵盖了各种模式的原理、应用和示例。下面将详细讨论Java设计模式中的主要类别及其重要知识点。 1. 创建型模式: - 单例模式:确保一个...