java_23种设计模式之策略模式

来源:互联网 发布:iphone7p只有2g网络 编辑:程序博客网 时间:2024/05/17 22:49

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

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

详细解释如下:

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.总结:
优点:可以动态的选择需要的实现;
缺点:需要自行去决定需要那些实现,即必须对每个实现类熟悉。