网友通过本文主要向大家介绍了策略模式java,java策略模式实例,java策略设计模式,java中的策略模式,java设计模式策略模式等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
策略模式,java策略模式
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语句,这违反了面向对象的原则之一,对修改封装(开放封闭原则)
如何用策略模式来解决这个问题?
①定义一个策略的接口:
public interface Strategy { void travel(); }
②根据不同的出行方法来实现该接口:
public 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(); } }
android常用策略模式例子:
策略模式例子 : ListAdapter
当更换 Adapter 的具体实现时,仍然调用的是 ListView.setAdapter(…) 方法,查看 ListView 源码,发现 setAdapter 方法的参数是一个 ListAdapter:
可以看到 ListAdapter 是一个接口,ArrayAdapter 和 BaseAdapter 是它的一个实现类
策略模式例子2 : TimeInterpolator