标签:
最近看了《head first 设计模式》一书,便总结了里面的一些内容,今天就简单介绍一下策略模式。
策略模式:定义了算法族,分别封装起来,让他们能够相互替换,此模式让算法的变化独立于使用算法的客户。简单来说,就是将各个算法分别封装起来,使得他们能够互换。
下面是策略模式的示例结构图:
策略模式涉及三个角色:
源代码:
抽象策略类:
public interface Strategy { /** * 策略方法 */ public void strategyInterface(); }
具体策略类:
public class ConcreteStrategyA implements Strategy { @Override public void strategyInterface() { //相关的业务 } }
public class ConcreteStrategyB implements Strategy { @Override public void strategyInterface() { //相关的业务 } }
对象类:
public class Context { //持有一个具体策略的对象 private Strategy strategy; /** * 构造函数,传入一个具体策略对象 * @param strategy 具体策略对象 */ public Context(Strategy strategy){ this.strategy = strategy; } /** * 策略方法 */ public void contextInterface(){ strategy.strategyInterface(); } }
应用场景举例:
抽象策略类:
/** * @author haifei * 抽象策略类 */ public interface FlyBehavior { public void fly(); }
具体策略类:
ConcreteStrategyA:
public class FlyNoWay implements FlyBehavior{ @Override public void fly() { System.out.print("不会飞行"); } }
ConcreteStrategyB:
public class FlyWithWings implements FlyBehavior{ @Override public void fly() { System.out.print("用翅膀飞行"); } }
环境类:
public class DuckSpecial { FlyBehavior flyBehavior; public DuckSpecial(FlyBehavior flyBehavior){ this.flyBehavior = flyBehavior; } public void fly(){ flyBehavior.fly(); } }
客户端:
public class DuckSpecialTest { public static void main(String[] args) { //根据需要选择算法 FlyBehavior fly = new FlyWithWings(); DuckSpecial duck = new DuckSpecial(fly); duck.fly(); } }
运行结果:
用翅膀飞行
标签:
原文地址:http://www.cnblogs.com/mercuryli/p/5276467.html