今天给大家介绍第三个设计模式:策略模式
一.策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用
UML示意图
二.组成部分:
1.
环境角色:持有一个策略类引用
2.
抽象策略
3.
具体策略:相关的算法或操作
三.代码例子
1. 抽象策略
package
com.eekq.strategy;
public
interface
IStrategy {
/**
策略方法
*/
public
abstract
double
add();
}
2. 具体策略,这里我以两个具体策略为例
package
com.eekq.strategy;
public
class
ConcreteStrategy1
implements
IStrategy {
/**
示意性算法
*/
public
double
add() {
//
TODO
自动生成方法存根
System.
out
.println(
this
.getClass().getName() +
"的加法运算"
);
return
0;
}
}
package
com.eekq.strategy;
public
class
ConcreteStrategy2
implements
IStrategy {
public
double
add() {
//
TODO
自动生成方法存根
System.
out
.println(
this
.getClass().getName() +
"的加法运算"
);
return
0;
}
}
3.环境角色
package
com.eekq.strategy;
public
class
Context {
/**
环境角色类
*/
private
IStrategy
strategy
;
public
Context(IStrategy strategy) {
this
.
strategy
= strategy;
}
/**
策略方法
*/
public
double
add() {
this
.
strategy
.add();
return
0;
}
}
4.客户端调用
package
com.eekq.strategy;
public
class
Main {
/**
*
@param
args
*/
public
static
void
main(String[] args) {
//
TODO
自动生成方法存根
Context context =
new
Context(
new
ConcreteStrategy1());
context.add();
//执行算法1
context =
new
Context(
new
ConcreteStrategy2());
context.add();
//执行算法2
}
}
5.执行结果:
com.eekq.strategy.ConcreteStrategy1的加法运算
com.eekq.strategy.ConcreteStrategy2的加法运算
6.总结
优点:动态改变算法或行为
缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略类,必须对每一个算法了解
作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552