您的位置:首页 > 编程语言 > Java开发

java_23种设计模式之策略模式

2012-11-18 11:03 531 查看
关于设计模式至今理解不是很深,在此发表文章一方面为了加深对设计模式的理解,另一方面希望由此与大家进行交流。

今天研究了一下策略模式,对策略模式理解为:通过对抽象策略角色(抽象类、接口)的实现的包装,从未进行动态操作的过程。

详细解释如下:

1.抽象策略角色:策略类,包含要做的事情(方法),通常有抽象类或接口进行实现;

2.策略类的实现:包装了对要做的事情的具体做法和行为;

3.动态操作:持有对策略类的引用,从而可以动态选择需要的实现,最终交给某一客户端进行调用。

对于策略模式来说,核心的部分是持有对策略类的引用。

具体代码示例如下:

1./**策略类*/

public interface IStrategy {
/**策略方法*/
public abstract double add();
}
2./**策略类的实现,以下写了两个实现*/

public class ConcreteStrategy1 implements IStrategy
{
/**示意性算法*/
public double add() {
// TODO 自动生成方法存根
System.out.println(this.getClass().getName()
+ "的加法运算");
return 0;
}
}
public class ConcreteStrategy2 implements IStrategy
{
public double add() {
// TODO 自动生成方法存根
System.out.println(this.getClass().getName()
+ "的加法运算");
return 0;
}
}
3./**对策略类的引用*/

public class Context {
/**环境角色类*/
private IStrategy strategy;
public Context(IStrategy strategy) {
this.strategy = strategy;
}
/**策略方法*/
public double add() {
this.strategy.add();
return 0;
}
}
4./**客户端调用*/

public class Main {
/**
*@paramargs
*/
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.执行结果如下:
ConcreteStrategy1的加法运算
ConcreteStrategy2的加法运算
6.总结:
优点:可以动态的选择需要的实现;
缺点:需要自行去决定需要那些实现,即必须对每个实现类熟悉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: