策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 策略模式的好处在于你可以动态的改变对象的行为。
策略模式主要有三个对象:抽象策略对象(它可由接口或抽象类来实现。),具体策略对象(它封装了实现同不功能的不同算法。),环境对象(该类中实现了对抽象策略中定义的接口或者抽象类的引用。)
具体代码
抽象接口
package strategy;
public interface TravelStrategy {
public void travelAlgorithm();
}
具体实现类坐火车类
package strategy;
public class TrainStrategy implements TravelStrategy{
@Override
public void travelAlgorithm() {
System.out.println("i'm travel by train");
}
}
具体实现类坐飞机类
package strategy;
public class AirStrategy implements TravelStrategy{
@Override
public void travelAlgorithm() {
System.out.println("i'm travel by airplane");
}
}
具体实现类骑自行车类
package strategy;
public class BicycleStrategy implements TravelStrategy{
@Override
public void travelAlgorithm() {
System.out.println( "i'm travel by bike");
}
}
环境对象
package strategy;
/**
* 环境对象
* @author mercy
*
*/
public class PersonContext {
private TravelStrategy strategy;
public PersonContext(TravelStrategy strategy){
this.strategy=strategy;
}
public void travelAlgorithm(){
this.strategy.travelAlgorithm();
}
}
测试类
package strategy;
public class Test {
public static void main(String[] args) {
PersonContext strategy=new PersonContext(new AirStrategy());
strategy.travelAlgorithm();
strategy=new PersonContext(new BicycleStrategy());
strategy.travelAlgorithm();
strategy=new PersonContext(new TrainStrategy());
strategy.travelAlgorithm();
}
}
结果
i'm travel by airplane
i'm travel by bike
i'm travel by train
可以发现策略模式和代理模式在代码上还是有点像的,唯一的区别就是环境对象类不需要实现抽象接口,也就是说这个类统一了具体的行为。而代理类需要实现抽象接口,就是说代理类可以允许不同的行为实现。