策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
[img]http://dl.iteye.com/upload/attachment/0077/8431/7bb3f063-40a6-30be-a17b-2b33458fee93.jpg[/img]
Context( 应用场景 ):
需要使用 ConcreteStrategy 提供的算法。
内部维护一个 Strategy 的实例。
负责动态设置运行时 Strategy 具体的实现算法。
负责跟 Strategy 之间的交互和数据传递。
Strategy( 抽象策略类 ) :
定义了一个公共接口,各种不同的算法以不同的方式实现这个接口, Context 使用这个接口调用不同的算法,一般使用接口或抽象类实现。
ConcreteStrategy( 具体策略类 ) :
实现了 Strategy 定义的接口,提供具体的算法实现。
下面我们举一个例子就可以了:
[b][size=medium][color=red]context类[/color][/size][/b]
[b][size=medium][color=red]策略接口[/color][/size][/b]
[b][size=medium][color=red]策略实现类[/color][/size][/b]
[img]http://dl.iteye.com/upload/attachment/0077/8431/7bb3f063-40a6-30be-a17b-2b33458fee93.jpg[/img]
Context( 应用场景 ):
需要使用 ConcreteStrategy 提供的算法。
内部维护一个 Strategy 的实例。
负责动态设置运行时 Strategy 具体的实现算法。
负责跟 Strategy 之间的交互和数据传递。
Strategy( 抽象策略类 ) :
定义了一个公共接口,各种不同的算法以不同的方式实现这个接口, Context 使用这个接口调用不同的算法,一般使用接口或抽象类实现。
ConcreteStrategy( 具体策略类 ) :
实现了 Strategy 定义的接口,提供具体的算法实现。
下面我们举一个例子就可以了:
[b][size=medium][color=red]context类[/color][/size][/b]
public class Duck {
//定义策略类
private Flyable fly;
private Quackable quack;
public void swim() {
System.out.println("duck is swimming");
}
//使用策略类的方法
public void fly() {
if(fly!=null)
fly.fly();
}
//使用策略类的方法
public void quack() {
if(quack!=null)
quack.quack();
}
//注入策略类
public void setFlyable(Flyable fly) {
this.fly = fly;
}
//注入策略类
public void setQuackable(Quackable quack) {
this.quack = quack;
}
public void display() {
swim();
fly();
quack();
}
public static void main(String args[]) {
Duck duck = new Duck();
//注入策略类
duck.setFlyable(new FlyImplement2());
duck.setQuackable(new QuackImplement2());
duck.display();
}
}
[b][size=medium][color=red]策略接口[/color][/size][/b]
public interface Flyable {
public void fly();
}
public interface Quackable {
public void quack();
}
[b][size=medium][color=red]策略实现类[/color][/size][/b]
public class FlyImplement2 implements Flyable{
@Override
public void fly() {
System.out.println("FlyImplement2");
}
}
public class QuackImplement2 implements Quackable{
@Override
public void quack() {
System.out.println("QuackImplement2");
}
}