读书人

计策模式结合Map 重构 if else语句

发布时间: 2012-09-03 09:48:39 作者: rapoo

策略模式结合Map 重构 if else语句

package com.bruce.pattern.strategy;import com.bruce.pattern.strategy.behavior.FlyBehavior;import com.bruce.pattern.strategy.behavior.QuackBehavior;public abstract class Duck {QuackBehavior quackBehavior;FlyBehavior flyBehavior;public abstract void display();public void performFly(){        flyBehavior.fly();    }public void performQuack(){        quackBehavior.quack();    }public void setQuackBehavior(QuackBehavior quackBehavior) {this.quackBehavior = quackBehavior;}public void setFlyBehavior(FlyBehavior flyBehavior) {this.flyBehavior = flyBehavior;}}

package com.bruce.pattern.strategy;public class MallardDuck extends Duck{@Overridepublic void display() {System.out.println("This is mallardDuck... ");}}

public interface FlyBehavior {void fly();}

public class FlyWithWings implements FlyBehavior{@Overridepublic void fly() {System.out.println("Flying with wings!");}}

public class FlyNoWay implements FlyBehavior{@Overridepublic void fly() {System.out.println("Flying no way....");}}

package com.bruce.pattern.strategy;import java.util.HashMap;import java.util.Map;import com.bruce.pattern.strategy.behavior.*;public class Client {/** * @param args */public static void main(String[] args) {Duck duck = new MallardDuck();for(int i = 0;i<2;i++){if(i == 0){duck.setFlyBehavior(new FlyWithWings());}else{duck.setFlyBehavior(new FlyNoWay());}fly(duck);}Map<String, FlyBehavior> map = new HashMap<String, FlyBehavior>();map.put("0", new FlyWithWings());map.put("1", new FlyNoWay());for(int i = 0;i<2;i++){FlyBehavior flyBehavior = map.get(Integer.toString(i));duck.setFlyBehavior(flyBehavior);fly(duck);}}public static void fly(Duck duck){duck.performFly();}}

运行结果:
Flying with wings!Flying no way....Flying with wings!Flying no way....

看到有帖子讨论这个,策略+表驱动法(Map),不错,哪天再结合工厂方法写个重构的例子,总结以后使用。

读书人网 >编程

热点推荐