策略模式结合Map 取代 程序中的 if else语句_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 策略模式结合Map 取代 程序中的 if else语句

策略模式结合Map 取代 程序中的 if else语句

 2012/2/23 9:34:23  zsk_china  程序员俱乐部  我要评论(0)
  • 摘要:packagecom.bruce.pattern.strategy;importcom.bruce.pattern.strategy.behavior.FlyBehavior;importcom.bruce.pattern.strategy.behavior.QuackBehavior;publicabstractclassDuck{QuackBehaviorquackBehavior;FlyBehaviorflyBehavior;publicabstractvoiddisplay()
  • 标签:程序 Map 模式 结合
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,不错,哪天再结合工厂方法写个重构的例子,总结以后使用。
发表评论
用户名: 匿名