策略模式属于对象的行为模式。目的是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而可以使他们可以相互替换。策略模式使得算法可以在不影响客户端的情况下发生变化。
主要角色:
- 环境角色:持有对Strategy的引用。
- 抽象策略角色
- 具体策略角色:包装了具体的算法。
适用场合:
- 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。
- 如果系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些算法类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则。客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。
- 一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复发的和只与算法有关的数据。
比如说要开发一个计算器,有加减乘除四种算法,可以这样去设计,类图如下:
环境角色:
package com.dp.strategy;
public class Calculator{
private Calculate ca;
public Calculator(Calculate ca){
this.ca = ca;
}
public int result(int a,int b){
return st.operation(a,b);
}
}
抽象策略角色:
package com.dp.strategy;
public interface Calculate {
public int operation(int a,int b);
}
下面是具体的策略
加法:
package com.dp.strategy;
public class AddCalculate implements Calculate{
@Override
public int operation(int a,int b) {
return a+b;
}
}
减法:
package com.dp.strategy;
public class MinusCaculate implements Calculate{
@Override
public int operation(int a,int b) {
return a-b;
}
}
乘法:
package com.dp.strategy;
public class MultiplyCalculate implements Calculate{
@Override
public int operation(int a,int b) {
return a*b;
}
}
除法:
package com.dp.strategy;
public class DivideCalculate implements Calculate{
@Override
public int operation(int a,int b) {
return a/b;
}
}
测试:
package com.dp.strategy;
public class Test {
public static void main(String[] args) {
Calculator ca = new Calculator(new AddCalculate ());
System.out.println(ca.result(1,2));
ca = new Calculator(new MinusCaculate ());
System.out.println(ca.result(1,2));
}
}
策略模式在Hibernate中就有使用, 在使用Hibernate是需要配置一个sql的方言Dialect,不同的数据库是不同的,你可以根据你选择使用的数据库去配置不同的Dialect,这个就是一个策略模式。
这个东西大概就是这个意思,有疏漏之处多多指教....
- 大小: 34.6 KB
分享到:
相关推荐
【Java设计模式】(2)策略模式Strategy
2009-03-9 策略模式Strategy:当解决一个问题的途径(策略)有很多种的时候,每一种处理方式都可以做为一种处理策略,通过管理类来切换调用不同的策略。
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。...
C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载
使用Java实现不同排序算法的策略模式的代码。
主要介绍了PHP设计模式之 策略模式Strategy,结合实例形式详细分析了PHP基于对象行为型的策略模式Strategy具体原理、实现技巧与相关操作注意事项,需要的朋友可以参考下
走进设计模式之 策略模式(Strategy) 代码
设计模式C++学习之策略模式(Strategy)
策略模式思想简单实现,初学者可看看。 设计模式 策略模式 Strategy
设计模式 策略模式。金典模式之策略模式代码。
strategy策略模式源码 策略模式源码 策略模式源码 策略模式源码
设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了
1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式...
这种设计模式比较常用,希望能够帮助到大家。
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each ...
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第23节:行为型模式Strategy策略模式
Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量框架都使用了它 策略模式 Strategy:java.util....
C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式