[极简理论] 策略模式 (Strategy Pattern)
if..else 的判断太麻烦,逻辑太烧脑怎么办,
策略一,策略二,策略三 排排坐
需要哪个就拿走,不谢
典型代表:
switch( strategy_key ):
case "s1": 策略一;break;
case "s2":策略二; break;
case "s3":策略三; break;
default: 没有你要找的策略;
}
变种一
let strategys = { "s1": 策略一, "s2":策略二,"s3": 策略3}
function doStrategy(s_key){
return strategys(s_key)
}
doStrategy ("s1")("hello world")
变种二
interface Strategys {
void strategysCanDo(param);
}
class 策略一 implements Strategys {
void strategysCanDo(param){ System.out.println(param) }
}
class 策略二 implements Strategys {
void strategysCanDo(param){ System.out.println("some prefix" + param) }
}
class 策略三 implements Strategys{
void strategysCanDo(param){ System.out.println(param + "some suffix" ) }
}
class CallStrategys{
private Strategys myStrategy;
CallStrategys( Strategys strategy){
this. myStrategy = strategy;
}
void call(msg){
this. myStrategy. strategysCanDo (msg);
}
}
void main(){
CallStrategys cs = new CallStrategys (new 策略二 ());
cs.call("this is my message);
}