- 浏览: 447177 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (162)
- easymock (3)
- 模板引擎 (3)
- JForum (4)
- web (9)
- spring (10)
- java (20)
- struts (9)
- uml (3)
- java pattern (19)
- JQuery (14)
- 多线程 (13)
- database (21)
- PS (3)
- ejb (6)
- 版本管理 svn , maven , ant (2)
- protocol (1)
- 测试 (1)
- ws (7)
- Apache (4)
- 脚本语言 (1)
- guice (1)
- 分布式 (4)
- 架构 (0)
- 经验 (1)
- 版本管理 svn (1)
- maven (1)
- ant (1)
- 书籍 (1)
- Linux (1)
最新评论
-
Master-Gao:
稍微明白了点,,有点萌萌哒
为什么匿名内部类参数必须为final类型 -
waw0931:
终于明白了,谢谢!
为什么匿名内部类参数必须为final类型 -
十三圆桌骑士:
提供了两个链接还是有用的。
安装Mondrian -
放方芳:
[flash=200,200][/flash]
Freemarker标签使用 -
放方芳:
[b][/b]
Freemarker标签使用
策略模式(Strategy):它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)
UML:
Strategy - defines an interface common to all supported algorithms. Context uses this interface to call the algorithm defined by a ConcreteStrategy.
ConcreteStrategy - each concrete strategy implements an algorithm.
Context
- contains a reference to a strategy object.
- may define an interface that lets strategy accessing its data.
The Context objects contains a reference to the ConcreteStrategy that should be used. When an operation is required then the algorithm is run from the strategy object. The Context is not aware of the strategy implementation. If necessary, addition objects can be defined to pass data from context object to strategy.
The context object receives requests from the client and delegates them to the strategy object. Usually the ConcreteStartegy is created by the client and passed to the context. From this point the clients interacts only with the context.
例子:
public interface IBehaviour { public int moveCommand(); } public class AgressiveBehaviour implements IBehaviour{ public int moveCommand() { System.out.println("\tAgressive Behaviour: if find another robot attack it"); return 1; } } public class DefensiveBehaviour implements IBehaviour{ public int moveCommand() { System.out.println("\tDefensive Behaviour: if find another robot run from it"); return -1; } } public class NormalBehaviour implements IBehaviour{ public int moveCommand() { System.out.println("\tNormal Behaviour: if find another robot ignore it"); return 0; } } public class Robot { IBehaviour behaviour; String name; public Robot(String name) { this.name = name; } public void setBehaviour(IBehaviour behaviour) { this.behaviour = behaviour; } public IBehaviour getBehaviour() { return behaviour; } public void move() { System.out.println(this.name + ": Based on current position" + "the behaviour object decide the next move:"); int command = behaviour.moveCommand(); // ... send the command to mechanisms System.out.println("\tThe result returned by behaviour object " + "is sent to the movement mechanisms " + " for the robot '" + this.name + "'"); } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Main { public static void main(String[] args) { Robot r1 = new Robot("Big Robot"); Robot r2 = new Robot("George v.2.1"); Robot r3 = new Robot("R2"); r1.setBehaviour(new AgressiveBehaviour()); r2.setBehaviour(new DefensiveBehaviour()); r3.setBehaviour(new NormalBehaviour()); r1.move(); r2.move(); r3.move(); System.out.println("\r\nNew behaviours: " + "\r\n\t'Big Robot' gets really scared" + "\r\n\t, 'George v.2.1' becomes really mad because" + "it's always attacked by other robots" + "\r\n\t and R2 keeps its calm\r\n"); r1.setBehaviour(new DefensiveBehaviour()); r2.setBehaviour(new AgressiveBehaviour()); r1.move(); r2.move(); r3.move(); } }
发表评论
-
访问者模式 Visitor(转)
2012-06-25 14:49 1202一、引子 对于系统中一个已经完成的类层次结构,我们已 ... -
模板方法模式 Template Method
2012-06-21 10:21 927GOF给模板方法(Template Method)模式定义一个 ... -
状态模式 State
2012-06-19 15:37 1057State模式的定义: 不同的 ... -
备忘录模式 Memento(转)
2012-06-19 14:11 0备忘录模式(Memento) 属于对象的行为模式。 ... -
中介者模式 Mediator (转)
2012-06-19 11:11 0一、中介者模式简介 ... -
迭代器模式 iterator
2012-06-18 14:58 3303一、 引言 迭代这个名词对于熟悉Java的人来说绝对不陌 ... -
解释器模式 interpreter(转)
2012-06-18 13:48 0Interpreter模式也叫解释器模式,是由GoF提出的23 ... -
责任链模式 chain of responsibility(原)
2012-06-15 15:56 1064动机: 在开发过程中有一种情况:一个事件产生一个请求,这个请 ... -
享元模式 flyweight
2012-06-14 15:45 931个人理解:当系统内部需要使用大量的细粒度对象时,内存中每种类型 ... -
外观模式 Facade
2012-06-13 16:02 963先做个总结: 外观模式就是提供一个高层接口来集成、制定、调用 ... -
组合模式(Composite)
2012-06-13 15:33 2222The figure below shows a UML cl ... -
适配器模式(Adapter )
2012-06-13 14:46 980Adapter - Convert the interfac ... -
Bridge桥接模式
2012-06-08 15:24 800Bridge桥接模式是一种结构型模式,它主要应对的是:由于类 ... -
代理模式
2012-06-08 11:06 811代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引 ... -
设计模式(Design Pattern)的原则
2012-06-08 11:00 875设计模式(Design Pattern)的原则 1、&q ... -
原型模式 Prototype Pattern
2012-03-30 18:34 1176一. 原型模式简介 ... -
设计模式之Decorator
2012-03-30 16:44 821设计模式之Decorator(油漆工) ... -
命令模式
2011-12-09 15:35 816优点: 解耦了发送者和接受者之间联系。 发送者调用一个 ... -
观察者模式
2011-12-09 10:50 972Define a one-to-many depend ... -
抽象工厂 理解
2011-10-14 18:22 1019抽象工厂模式 抽象工厂模式(英语:Abstra ...
相关推荐
### 策略模式 Strategy Pattern #### 概述 策略模式是一种行为设计模式,它使得算法可以在运行时被更改。这种模式允许一个类的行为或其算法在运行时根据需要进行改变,通过这种方式,我们可以轻松地扩展不同的算法...
策略模式(Strategy)是软件设计模式中的一种行为模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及定义一系列算法,并将每个算法封装起来,使得它们可以相互替换,同时使得算法的变化独立于使用它...
2009-03-9 策略模式Strategy:当解决一个问题的途径(策略)有很多种的时候,每一种处理方式都可以做为一种处理策略,通过管理类来切换调用不同的策略。
C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载
策略模式的主要组件包括上下文(Context)、策略(Strategy)接口以及具体的策略类。上下文是使用策略的对象,它通过策略接口与策略进行交互。策略接口定义了一组操作,这些操作将在不同的策略实现中有所不同。具体策略...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和一个行为根据...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,有时我们需要根据不同的场景或条件选择不同的算法或行为。策略模式允许我们将这些算法封装成独立的类,每个类代表一种策略,然后在运行...
在`Demo1_Strategy`这个示例中,可能包含了多个C++源文件,分别实现了策略模式的不同方面,例如定义了策略接口、具体策略类以及上下文类的实现。通过分析这些源代码,我们可以更深入地理解策略模式的用法和优势。 ...
本文实例讲述了PHP设计模式之 策略模式Strategy。分享给大家供大家参考,具体如下: 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法...
在策略模式中,有三个主要角色:策略接口(Strategy Interface)、具体策略类(Concrete Strategy Classes)和上下文(Context)。策略接口定义了所有支持的算法的公共接口,这样上下文就可以通过这个接口来调用这些...
策略模式的核心组成部分包括策略(Strategy)、上下文(Context)和具体策略(Concrete Strategies)。策略定义了算法家族,而上下文则使用这些策略,但并不知道具体的实现细节。具体策略是实现了策略接口的具体算法...
策略模式的主要组成部分包括上下文(Context)、策略接口(Strategy Interface)和具体策略类(Concrete Strategy Classes)。上下文维护一个对策略对象的引用,并使用这个引用来调用策略对象的算法。策略接口定义了...
首先,策略模式由三个主要组成部分构成:上下文(Context)、策略(Strategy)接口和具体策略(Concrete Strategy)。上下文是使用策略的对象,它维护一个对策略的引用,并调用策略的接口来执行算法。策略接口定义了一组...
策略模式的核心组成部分包括上下文(Context)、策略(Strategy)和具体策略(Concrete Strategy)。上下文是使用策略的对象,它定义了客户所期望的接口,并负责调用具体策略对象的算法。策略是所有具体策略的抽象接口,它...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许你使用算法族,而无需在代码中硬编码这些算法。通过将算法封装到具有共同接口的独立对象中,策略模式使得你可以根据需要灵活地切换算法,...
在提供的`strategy.h`文件中,可能包含了策略模式的C++实现。文件中可能定义了策略接口和几个具体策略类的声明,以及上下文类的接口。为了进一步了解其内容,我们需要查看源代码。由于实际的代码没有提供,这里只能...
SpringBoot结合策略模式实战套路 策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。...在提供的压缩包文件"strategy"中,可能包含了关于策略模式的示例代码或者详细解释,你可以解压后查看,进一步理解和学习策略模式的实现和应用。
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,我们经常遇到需要根据不同的条件或策略来执行不同操作的情况。策略模式提供了一种将算法族封装到各自独立的对象中,使得它们可以在运行...