java设计模式----策略模式

策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 策略模式的好处在于你可以动态的改变对象的行为。

策略模式主要有三个对象:抽象策略对象(它可由接口或抽象类来实现。),具体策略对象(它封装了实现同不功能的不同算法。),环境对象(该类中实现了对抽象策略中定义的接口或者抽象类的引用。)

具体代码

抽象接口

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

可以发现策略模式和代理模式在代码上还是有点像的,唯一的区别就是环境对象类不需要实现抽象接口,也就是说这个类统一了具体的行为。而代理类需要实现抽象接口,就是说代理类可以允许不同的行为实现。

原文地址:https://www.cnblogs.com/JAYIT/p/5062816.html