对策模式

策略模式
1. 策略模式,定义了算法族,分别封装起来,让它们之间可以互相转换,此模式让算放的变化独立于使用算法的客户。

2.================例子=========================================
public abstract class Duck {

	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
	
	public Duck(){}
	
	public void performFly(){
		flyBehavior.fly();
	}
	
	public void performQuack(){
		quackBehavior.quack();
	}
	
	public void setFlyBehavior(FlyBehavior fb){
		flyBehavior = fb;
	}
	
	public void setQuackBehavior(QuackBehavior qb){
		quackBehavior = qb;
	}
}


public class MallardDuck extends Duck {

	public MallardDuck(){
		quackBehavior = new Quack();
		flyBehavior = new FlyWithWings();
	}
}


public interface FlyBehavior {

	public void fly();
}


public class FlyWithWings implements FlyBehavior {

	@Override
	public void fly() {
		System.out.println("I am flying");
	}
}


public class FlyNoWay implements FlyBehavior {

	@Override
	public void fly() {
		System.out.println("I can't flay");
	}
}


public interface QuackBehavior {

	public void quack();
}


public class Quack implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("I am quack");
	}
}


public class MuteQuack implements QuackBehavior {

	@Override
	public void quack() {
		System.out.println("I can't quack");
	}
}



public class MiniDuckSimulator {

       //测试
	public static void main(String[] args) {
		
		Duck model = new ModelDuck();
		model.performFly();
		model.setFlyBehavior(new FlyRocketPowered());
		model.performFly();
	}
}


3.使用场景:
  1).一个系统需要动态地让一个对象在许多行为中选择一种行为。
  2).一个系统需要动态地在几种算法中选择一种。
  3).一个系统的算法使用的数据不可以让客户端知道。
  4).避免使用难以维护的多重条件选择语句。
  5).以不同的格式保存文件。
  6).以不同的算法压缩文件。
  7).以不同的算法截获图象。
 对策模式.以不同的格式输出同样数据的图形,比如曲线 或框图bar等。

4.优点:
  1).提供了管理相关的算法族的办法。
  2).提供了可以替换继承关系的办法。
  3).可以避免使用多重条件转移语句。

5.缺点:
  1).客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  2).策略模式造成很多的策略类。