写项目的时候经常遇到一种,一个问题有多种解决方案的情况。不能老是写if else的流水账哈,这样不符合单一原则。这时候就考虑考虑策略模式了。嘴笨,直接上代码。
想想一个场景,中午我老是不知道吃什么,附近的餐厅早就吃腻了呜呜呜呜。
上接口
//午饭的策略接口
public interface LunchStrategy {
int pay();//花多少钱哈
}
那我们的plan A,吃板面
public class BanMianStrategy implements LunchStrategy{
@Override
public int pay() {
return 12;//帝都加个蛋和豆皮差不多就这个价吧
}
}
plan B,吃盒饭
public class HeFanStrategy implements LunchStrategy{
@Override
public int pay() {
return 18;//两荤一素
}
}
之后午餐
public class Lunch {
private static final String TAG = Lunch.class.getSimpleName();
private LunchStrategy strategy;
public void eat() throws NullPointerException {
if (null == strategy) throw new NullPointerException();
Log.i(TAG, "吃了顿午饭,一共花了" + strategy.pay() + "元呜呜呜呜");
}
public LunchStrategy getStrategy() {
return strategy;
}
public void setStrategy(LunchStrategy strategy) {
this.strategy = strategy;
}
}
那我们开始吃饭吧。
Lunch lunch = new Lunch();
//我基本在食堂只吃板面
BanMianStrategy banMian = new BanMianStrategy();
lunch.setStrategy(banMian);lunch.eat();
01-10 10:45:06.081 4412-4412/? I/Lunch: 吃了顿午饭,一共花了12元呜呜呜呜
打印结果肯定是12元了哈。
这么做有什么用呢,主要就是可扩展行更强了。楼下餐厅要是新开一个呷哺呷哺怎么办?那就写一个XiapuXiapuStrategy呗哈哈哈哈。