- 浏览: 623968 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
xianzi_2008:
xianzi_2008 写道楼主请教下,我缓存了一个List& ...
Ehcache -
xianzi_2008:
楼主请教下,我缓存了一个List<Bean>对象, ...
Ehcache -
jsdsh:
收藏好.五个字
hibernate之one-to-many详细 -
Tlife:
好!!!!
hibernate------HQL总结 -
yanqingluo:
例子很恰当。
观察者模式
1. 以一个算术运算为例,传统做法为:
java 代码
- package org.common;
- public class Calculate {
- public String getResult(float a,float b,char c){
- float add = a+b;
- float sub = a-b;
- float mult = a*b;
- float division = a/b;
- switch(c){
- case '+':
- return "相加结果为:" + add;
- case '-':
- return "相减结果为:" + sub;
- case '*':
- return "相乘结果为:" + mult;
- case '/':
- return "相除结果为:" + division;
- default:
- return "出错";
- }
- }
- }
java 代码
- package org.common;
- public class Test {
- public static void main(String[] args){
- float a = 200;
- float b = 50;
- Calculate cal = new Calculate();
- System.out.println(cal.getResult(a, b, '+'));
- System.out.println(cal.getResult(a, b, '-'));
- System.out.println(cal.getResult(a, b, '*'));
- System.out.println(cal.getResult(a, b, '/'));
- System.out.println(cal.getResult(a, b, '('));
- }
- }
运行结果为:
相加结果为:250.0
相减结果为:150.0
相乘结果为:10000.0
相除结果为:4.0
出错
2. 用策略模式来实现:
策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端
策略模式:
由三部分组成
A: 抽象策略角色:策略类,通常由一个接口或者抽象类实现
B: 具体策略角色:包装了相关的算法和行为
C: 环境角色:持有一个策略类的引用,最终给客户端调用的。
一个抽象策略角色:
java 代码
- package org.strategy;
- /**
- * 抽象策略角色
- */
- public abstract class AbstractStrategy {
- public abstract String calculate(float a,float b);
- }
几个具体策略角色:
java 代码
- package org.strategy;
- /**
- * 具体策略角色
- */
- public class SubStrategy extends AbstractStrategy{
- public String calculate(float a,float b){
- float result = a-b;
- return "相减结果为:" + result;
- }
- }
java 代码
- package org.strategy;
- /**
- * 具体策略角色
- */
- public class AddStrategy extends AbstractStrategy{
- public String calculate(float a,float b){
- float result = a+b;
- return "相加结果为:" + result;
- }
- }
java 代码
- package org.strategy;
- /**
- * 具体策略角色
- */
- public class MultStrategy extends AbstractStrategy{
- public String calculate(float a,float b){
- float result = a*b;
- return "相乘结果为:" + result;
- }
- }
java 代码
- package org.strategy;
- /**
- * 具体策略角色
- */
- public class DivisionStrategy extends AbstractStrategy{
- public String calculate(float a,float b){
- float result = a/b;
- return "相除结果为:" + result;
- }
- }
环境角色:
java 代码
- package org.strategy;
- /**
- * 环境角色,最终给客户端调用的
- */
- public class ContextRole {
- /**
- * 拥有一个策略类的引用
- */
- private AbstractStrategy abstactStrategy;
- public ContextRole(AbstractStrategy abstactStrategy){
- this.abstactStrategy = abstactStrategy;
- }
- public String calculate(float a,float b) {
- String result = abstactStrategy.calculate(a, b);
- return result;
- }
- }
客户端调用:
java 代码
- package org.strategy;
- /**
- * 客户端
- */
- public class Test {
- public static void main(String[] args){
- float a = 200;
- float b = 25;
- ContextRole contextRole1 = new ContextRole(new AddStrategy());
- System.out.println(contextRole1.calculate(a, b));
- ContextRole contextRole2 = new ContextRole(new SubStrategy());
- System.out.println(contextRole2.calculate(a, b));
- ContextRole contextRole3 = new ContextRole(new MultStrategy());
- System.out.println(contextRole3.calculate(a, b));
- ContextRole contextRole4 = new ContextRole(new DivisionStrategy());
- System.out.println(contextRole4.calculate(a, b));
- }
- }
输出结果为:
相加结果为:225.0
相减结果为:175.0
相乘结果为:5000.0
相除结果为:8.0
总结:
策略模式优点:
1.可以很方便的动态改变算法或行为
2.避免使用多重条件转移语句
策略模式缺点:
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2.造成很多的策略类。
发表评论
-
常用小代码段和开发经验收集
2011-04-21 14:47 990工作中用到的笔记,方便查找,不断补充。 1,截取过长的文字部分 ... -
java.lang.UnsupportedClassVersionError: Bad version number in .class file
2009-08-26 12:25 3905转载:http://www.blogjava.net/hwpo ... -
java调用dll(Eclipse+CDT+MinGW)
2009-03-06 15:25 6555第一步:配置环境 需要安装CDT和MinGW. CDT:因为 ... -
servlet2.5与el表达式
2008-11-23 15:23 2677Servlet2.4版本默认支持EL,如果在MyEclipse ... -
自定义ClassLoader遇到的问题
2008-09-16 16:47 15251.自定义的类加载器 package classloa ... -
自定义标签调用资源文件
2008-05-12 22:28 1972自定义标签处理类一般都继承TagSupport或BodyTag ... -
Failed to install Tomcat6 service(Tomcat6安装失败解决方法)
2008-05-06 16:24 11722转载 :http://www.handandaily.com/ ... -
tomcat5.5日志配置
2008-05-06 16:13 2531tomcat5.5日志配置: 从Tomcat5.5后,默认设置 ... -
java List<String>集合 传递值给js的数组
2008-04-21 18:12 5345<script> var intIndex= ... -
c3p0 com.mysql.jdbc.CommunicationsException异常
2008-02-18 17:32 6247使用c3p0,偶尔会报异常: 2008-02-18 10:52 ... -
Pattern Matcher
2008-02-18 10:30 1952package test; import java. ... -
FileUpload组件上传文件
2008-01-23 03:05 6712利用FileUpload组件上传文件,需要到apache上下载 ... -
hibernate大字段处理
2008-01-21 16:45 3217hibernate大字段处理:以mysql为例 比如传张图片, ... -
一个页面嵌套一个页面
2008-01-15 10:45 3552一个页面嵌套一个页面,比如a.jsp嵌套b.jsp那么可以用 ... -
java clone
2008-01-13 18:17 59581.java里的clone分为: A:浅复制(浅克隆): 浅复 ... -
修改Eclipse注释里的${Date}变量格式
2008-01-08 15:47 82301.eclipse3.3里${date}日期格 ... -
List移除元素
2008-01-05 16:16 24891. Iterator的remove()是移除从集合里取出来的 ... -
JDom处理xml
2008-01-05 13:51 21211.DOM的缺点主要是由于DOM是一个接口定义语言(IDL), ... -
观察者模式
2008-01-03 00:45 21389观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听 ... -
DelegatingRequestProcessor
2007-12-27 11:30 3700采用DelegatingRequestProcessor将处理 ...
相关推荐
策略模式(Strategy)是软件设计模式中的一种行为模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及定义一系列算法,并将每个算法封装起来,使得它们可以相互替换,同时使得算法的变化独立于使用它...
C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载
### 策略模式 Strategy Pattern #### 概述 策略模式是一种行为设计模式,它使得算法可以在运行时被更改。这种模式允许一个类的行为或其算法在运行时根据需要进行改变,通过这种方式,我们可以轻松地扩展不同的算法...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和一个行为根据...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,有时我们需要根据不同的场景或条件选择不同的算法或行为。策略模式允许我们将这些算法封装成独立的类,每个类代表一种策略,然后在运行...
在`Demo1_Strategy`这个示例中,可能包含了多个C++源文件,分别实现了策略模式的不同方面,例如定义了策略接口、具体策略类以及上下文类的实现。通过分析这些源代码,我们可以更深入地理解策略模式的用法和优势。 ...
在策略模式中,有三个主要角色:策略接口(Strategy Interface)、具体策略类(Concrete Strategy Classes)和上下文(Context)。策略接口定义了所有支持的算法的公共接口,这样上下文就可以通过这个接口来调用这些...
策略模式的核心组成部分包括策略(Strategy)、上下文(Context)和具体策略(Concrete Strategies)。策略定义了算法家族,而上下文则使用这些策略,但并不知道具体的实现细节。具体策略是实现了策略接口的具体算法...
策略模式的主要组成部分包括上下文(Context)、策略接口(Strategy Interface)和具体策略类(Concrete Strategy Classes)。上下文维护一个对策略对象的引用,并使用这个引用来调用策略对象的算法。策略接口定义了...
首先,策略模式由三个主要组成部分构成:上下文(Context)、策略(Strategy)接口和具体策略(Concrete Strategy)。上下文是使用策略的对象,它维护一个对策略的引用,并调用策略的接口来执行算法。策略接口定义了一组...
策略模式的核心组成部分包括上下文(Context)、策略(Strategy)和具体策略(Concrete Strategy)。上下文是使用策略的对象,它定义了客户所期望的接口,并负责调用具体策略对象的算法。策略是所有具体策略的抽象接口,它...
SpringBoot结合策略模式实战套路 策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许你使用算法族,而无需在代码中硬编码这些算法。通过将算法封装到具有共同接口的独立对象中,策略模式使得你可以根据需要灵活地切换算法,...
在提供的`strategy.h`文件中,可能包含了策略模式的C++实现。文件中可能定义了策略接口和几个具体策略类的声明,以及上下文类的接口。为了进一步了解其内容,我们需要查看源代码。由于实际的代码没有提供,这里只能...
2009-03-9 策略模式Strategy:当解决一个问题的途径(策略)有很多种的时候,每一种处理方式都可以做为一种处理策略,通过管理类来切换调用不同的策略。
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,我们经常遇到需要根据不同的条件或策略来执行不同操作的情况。策略模式提供了一种将算法族封装到各自独立的对象中,使得它们可以在运行...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。...在提供的压缩包文件"strategy"中,可能包含了关于策略模式的示例代码或者详细解释,你可以解压后查看,进一步理解和学习策略模式的实现和应用。
而策略模式(Strategy Pattern)则是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用它的客户端。它主要用于处理那些具有多种行为的对象,可以根据具体情境选择不同...