文章结构
1.策略模式
2.策略模式和工厂模式对比
3.参考文章
1.策略模式
网吧优惠活动充30赠10元,充50赠20,充100赠50,不足30该多少就是多少,这就是四种不同的算法,而策略模式将这四种算法分别封装起来,根据钱数来调用不同的算法。
策略模式就是对算法的封装,根据情况的不同调用不同的算法,将算法与和客户端分离,使算法独立于客户端之外。可以在不影响客户端的情况下更换算法。
使用场景:如果一段代码中存在很多个if-else的话(每个if代码块中是类似的算法或者为了切换不同子类),代码不但会臃肿,也会让维护工作变得更难,这时候就可以采用策略模式来进行替换。
下面是一个简单的策略模式的例子。
/**
* 抽象类
* @author live
*
*/
public interface ITravel{
void way();
}
/**
* 具体策略类
* @author live
*
*/
public class TravelCarImpl implements ITravel{
@Override
public void way() {
System.out.println("坐汽车出行");
}
}
/**
* 具体策略类
* @author live
*
*/
public class TravelBicycleImpl implements ITravel{
@Override
public void way() {
System.out.println("骑自行车出行");
}
}
/**
* 上下文
* @author live
*
*/
public class Context{
// 具体的策略对象
private ITravel travel;
// 初始化对象时放入
public Context(ITravel travel){
this.travel = travel;
}
/**
* 策略方法
*/
public void contextMethond(){
travel.way();
}
}
public class RunStrategy {
public static void main(String[] args){
// 创建需要的策略类
ITravel travel = new TravelCarImpl();
// 将策略类放入上下文
Context context = new Context(travel);
// 执行
context.contextMethond();
}
}
在上面的例子中,通过创建不同的策略对象来实现算法的替换。这种模式需要使用者知道每个类中的具体算法是什么。
2.策略模式和工厂模式对比
看完策略模式的代码之后是不是感觉和简单工厂模式类似。工厂模式是创建型模式,它接受指令,创建出符合要求的实例;而设计模式是行为型的设计模式,它接受已经创建好的实例,实现不同的行为。
简单工厂模式就是策略模式的一种,只不过是用来创建对象而已。策略模式是让对象在多种行为中选择一种。