[极简理论] 策略模式 (Strategy Pattern)

2019-10-11  本文已影响0人  齐桡

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);

}

上一篇 下一篇

猜你喜欢

热点阅读