第三个设计模式:策略模式
? 今天给大家介绍第三个设计模式:策略模式
一.策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用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.总结优点:动态改变算法或行为缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略类,必须对每一个算法了解作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552?