Headfirst java设计模式-策略模式
2018-08-06 10:25
26 查看
策略模式:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
代码实现:
(1)定义两个算法族(策略)的接口
public interface FlyBehavior { void fly(); } public interface QuackBehavior { void quack(); }
(2)定义一个接口,采用组合的方式调用相应的算法族(策略)接口。
public abstract class Duck { FlyBehavior flybehavior; QuackBehavior quackbehavior; public Duck(){ } public void performFly(){ flybehavior.fly(); } public void performQuack(){ quackbehavior.quack(); } public void swim(){ System.out.println("All duck float, even decoys"); } public void setFlyBehavior(FlyBehavior fb){ flybehavior = fb; } public void setQuackBehavior(QuackBehavior qb){ quackbehavior = qb; } }
(3)继承两个算法族(策略)接口,实现相应的实现类
public class FlyNoWay implements FlyBehavior{ @Override public void fly() { // TODO Auto-generated method stub System.out.println("I can't fly."); } } public class FlyRocketPowered implements FlyBehavior{ @Override public void fly() { // TODO Auto-generated method stub System.out.println("I am fly with a rocket."); } } public class FlyWithWings implements FlyBehavior{ @Override public void fly() { // TODO Auto-generated method stub System.out.println("I'm flying."); } } public class MuteQuack implements QuackBehavior{ @Override public void quack() { // TODO Auto-generated method stub System.out.println("<<Silence>>"); } } public class Quack implements QuackBehavior{ @Override public void quack() { // TODO Auto-generated method stub System.out.println("Quack"); } } public class Squeak implements QuackBehavior{ @Override public void quack() { // TODO Auto-generated method stub System.out.println("Squeak"); } }
(4)继承duck接口,实现具体的duck类,实例化不同的算法族(策略)。
public class MallardDuck extends Duck { public MallardDuck(){ quackbehavior = new Quack(); flybehavior = new FlyWithWings(); } } public class ModleDuck extends Duck { public ModleDuck(){ flybehavior = new FlyNoWay(); quackbehavior = new Quack(); } public void display(){ System.out.println("I am a modle Duck."); } }
(5)测试代码
public class MiniDuckSimulator { public static void main(String[] args){ Duck mallard = new MallardDuck(); mallard.performFly(); mallard.performQuack(); Duck modle = new ModleDuck(); modle.performFly(); modle.setFlyBehavior(new FlyRocketPowered()); modle.performFly(); } }阅读更多
相关文章推荐
- Headfirst java设计模式-状态模式
- Head First Java 设计模式——装饰者模式
- Head First Java 设计模式——工厂方法模式
- Head-first设计模式(一)——策略模式(Strategy Pattern)
- Headfirst java设计模式-外观模式
- Headfirst java设计模式-代理模式
- HEAD_FIRST设计模式学习 ----策略模式 c++简单实现代码
- Head First Java设计模式——观察者模式
- Head_First设计模式(一)----策略模式
- Java23种设计模式之策略模式
- JAVA设计模式之策略模式
- JAVA设计模式之策略模式(1)
- java_23种设计模式之策略模式
- Head First Design Patterns(深入浅出设计模式)-目录
- java设计模式之策略模式
- 设计模式--行为模式--策略模式--Java
- JAVA设计模式之策略模式
- Java中策略设计模式
- Java设计模式系列之策略模式
- Java设计模式透析之 —— 策略(Strategy)