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.总结:
优点:可以动态的选择需要的实现;
缺点:需要自行去决定需要那些实现,即必须对每个实现类熟悉。
今天研究了一下策略模式,对策略模式理解为:通过对抽象策略角色(抽象类、接口)的实现的包装,从未进行动态操作的过程。
详细解释如下:
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.总结:
优点:可以动态的选择需要的实现;
缺点:需要自行去决定需要那些实现,即必须对每个实现类熟悉。
相关文章推荐
- java23种设计模式之策略模式
- java 23种设计模式 08策略模式
- Java 23种设计模式之策略模式
- Java开发中的23种设计模式之十三:策略模式(strategy)
- java23种设计模式--策略模式(strategy)
- Java23种设计模之-----策略模式
- java23种设计模式之策略模式
- java 23种常用设计模式之策略模式(Strategy)
- 23种设计模式(11)java策略模式
- Java23种设计模式之策略模式
- 走穿java23种设计模式--16策略模式详解
- JAVA开发的23种设计模式之 --- 策略模式
- Java23种设计模式案例:策略模式(strategy)
- JAVA的23种设计模式---策略模式
- Java开发中的23种设计模式详解----策略模式(strategy)
- 【行为型模式】策略模式(Strategy)之23种java设计模式
- [置顶] 简述23种java设计模式之策略模式(strategy)
- 【Java23种设计模式学习笔记】一:策略模式
- Java23种设计模式:策略模式(四)
- 浅谈java 23种设计模式之策略模式(Strategy Pattern)