(本文中一些例子和定义均摘自《Head First 设计模式》)
“策略模式: 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户”
其实也就是把相似,类似的行为封装,并且使得它们之间可以互换.
举例, 鸭子的叫声有阿阿叫,也有呱呱叫.
我们首先把鸭子与鸭子叫 这两部分分开, 也就是把使用算法的客户和算法分开.
第二步,建立策略类(抽象策略方法), 通常使用接口或者是抽象类.在此例中,我们 建立鸭子叫的接口
public
interface
QuackBehavior
...
{
public void quack();
}
第三步,对每种不同的叫声Quack,Squeak进行实现
public
class
Quack
implements
QuackBehavior
...
{


public void quack() ...{
System.out.println("aa quake!!!");

}

}


public
class
Squeak
implements
QuackBehavior
...
{


public void quack() ...{
System.out.println("Squeak!!");

}

}
第四步,在基类中持有对策略类的引用
public
abstract
class
Duck
...
{
QuackBehavior quackBehavior;

public Duck() ...{
}
public abstract void display();

public void performQuack() ...{
quackBehavior.quack();
}

public void swim() ...{
System.out.println("all ducks can swim!");
}
//可以改变叫声

public void setQuackBehavior(QuackBehavior qb) ...{
this.quackBehavior = qb;
}
}
第五步,具体使用
public
class
MiniDuckSimulator
...
{


public static void main(String[] args) ...{
Duck mallard = new MallardDuck();
mallard.display();
mallard.setQuackBehavior(new Quack());
mallard.performQuack();

}

}
优点: 1.对算法独立的封装,不会由于使用者的变化,而对具体的算法也进行变化.实现算法代码的复用.
2. 可以对算法实行统一有效的管理
3. 用户可以方便的选择自己需要的算法
缺点:1. 用户需要知道所有的算法才能灵活运用
2. 策略类可能会非常的多