android中,java中的策略模式Strategy模式

来源:互联网 发布:paxos算法代码 编辑:程序博客网 时间:2024/05/17 00:09

策略模式

概念:

策略模式就是定义不同的算法,或者说不同的情况并且将不同的行为方式封装起来,根据不同的情况来使用不同的算法或者行为,当然,前提是结果都是一致的。

官方的说法是:

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变换。


我们先从例子说起吧,其实很简单:我们平时在做算法的时候会想到很多情况,比如说数值,返回值不同,使用不同的算法,用一个if else判断,或者swich判断,进行不同的算法,这里,从一个生活的实例说起吧:


我们出门旅游。有三种不同的算法(方式),步行,飞机,火车//旅游策略类public class TravelStrategy {//枚举中定义了三种不同的算法常量    enum Strategy{//步行,飞机,火车        WALK,PLANE,SUBWAY    }    private Strategy strategy;    public TravelStrategy(Strategy strategy){        this.strategy=strategy;    } //旅游方法    public void travel(){//判断方式分别进行操作        if(strategy==Strategy.WALK){            print(walk);        }else if(strategy==Strategy.PLANE){            print(plane);        }else if(strategy==Strategy.SUBWAY){            print(subway);        }    }     public void print(String str){        System.out.println(出行旅游的方式为:+str);    }     public static void main(String[] args) {//调用方法        TravelStrategy walk=new TravelStrategy(Strategy.WALK);        walk.travel();         TravelStrategy plane=new TravelStrategy(Strategy.PLANE);        plane.travel();         TravelStrategy subway=new TravelStrategy(Strategy.SUBWAY);        subway.travel();    }}这些都是正常思维方式下我们平时使用的方式。但是这样做有一个致命的缺点,一旦出行的方式要增加,我们就不得不增加新的else if语句,而这违反了面向对象的原则之一,对修改封闭。而这时候,策略模式则可以完美的解决这一切。那么用策略模式如何去做呢??步骤:(分四步):1,创建旅游接口,定义旅游方法2,创建不同的实现类,实现接口,3,创建策略包装类,实现包装4,方法的调用接口public interface Strategy {    void travel();}实现类:1,2,3public class WalkStrategy implements Strategy{     @Override    public void travel() {        System.out.println(walk);    } }public class PlaneStrategy implements Strategy{     @Override    public void travel() {        System.out.println(plane);    } }public class SubwayStrategy implements Strategy{     @Override    public void travel() {        System.out.println(subway);    } }包装类public class TravelContext {    Strategy strategy;     public Strategy getStrategy() {        return strategy;    }     public void setStrategy(Strategy strategy) {        this.strategy = strategy;    }     public void travel() {        if (strategy != null) {            strategy.travel();        }    }}调用:public class Main {    public static void main(String[] args) {        TravelContext travelContext=new TravelContext();        travelContext.setStrategy(new PlaneStrategy());        travelContext.travel();        travelContext.setStrategy(new WalkStrategy());        travelContext.travel();        travelContext.setStrategy(new SubwayStrategy());        travelContext.travel();    }}这样,如果以后只要增加了旅游的方式,只需要增加实现类就可以了,符合面向对象的思想


1 0
原创粉丝点击