策略模式结合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
{

@Override
public void display()
{
System.out.println("This is mallardDuck... ");
}

}

public interface FlyBehavior 
{
void fly();
}

public class FlyWithWings implements FlyBehavior
{

@Override
public void fly()
{
System.out.println("Flying with wings!");
}

}

public class FlyNoWay implements FlyBehavior
{

@Override
public 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),不错,哪天再结合工厂方法写个重构的例子,总结以后使用。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值