设计模式之策略模式

来源:互联网 发布:淘宝上种草是什么意思 编辑:程序博客网 时间:2024/06/05 15:31

设计模式之策略模式

策略模式(Strategy):    它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,    不会影响到使用算法的客户。策略模式组成:    环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。    抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。    具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。策略模式的实例:1.抽象策略类 
package com.mzsds.strategy;public abstract class WaySuper {    public abstract void getway();}
2.具体策略类 wayA:
package com.mzsds.strategy;public class WayA extends WaySuper{    public void getway() {        System.out.println("我得到了wayA的方法。");    }}
wayB:
package com.mzsds.strategy;public class WayB extends WaySuper {    public void getway() {        System.out.println("我得到了wayB的方法。");    }}
wayC:
package com.mzsds.strategy;public class WayC extends WaySuper {    public void getway() {        System.out.println("我得到了wayC的方法。");    }}
3.环境类
package com.mzsds.strategy;public class StrategyContext {    WaySuper waySuper;    public StrategyContext(WaySuper waySuper){         this.waySuper = waySuper;    }    public void  contextInterface() {        waySuper.getway();    }    }
4.测试
    package com.mzsds.strategy;    public class Client {    public static void main(String[] args) {        StrategyContext strategyContext;        String way = "wayB";        switch (way) {        case "wayA":            strategyContext = new StrategyContext(new WayA());            break;        case "wayB":            strategyContext = new StrategyContext(new WayB());            break;        case "wayC":            strategyContext = new StrategyContext(new WayC());        }        strategyContext.contextInterface();        }}
输出结果:我得到了wayB的方法。

·策略模式的优缺点:
优点:
1、可以动态的改变对象的行为
缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类
2、策略模式将造成产生很多策略类

·我的理解:
策略模式是策略环境通过对象参数进行对象方法的调用(环境通过已经new的对象参数去调用其算法)
(客户端new出环境,传递对象,调用环境,环境得到对象,客户端可在环境中调用不同的对象方法)
(客户端和方法的分离)