Java之计策模式
Java之策略模式
今天给大家介绍设计模式:策略模式
一.策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用
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 { /** *@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.执行结果:
com.eekq.strategy.ConcreteStrategy1的加法运算
com.eekq.strategy.ConcreteStrategy2的加法运算
6.总结
优点:动态改变算法或行为
缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略类,必须对每一个算法了解