策略模式的例子:刘皇叔取老婆,军师三个锦囊,顺利娶回老婆
场景三要素:三个妙计、一个锦囊,一个赵云
赵云是一个干活的人,从锦囊取出妙计,执行
用JAVA程序表示,类图:
三个妙计是同一个类型的东西,那咱先写个接口:
/**
* Created by xpeng on 2018/4/30.
* 首先定一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口
*/
public interface IStrategy {
//每个锦囊妙计都是一个可执行的算法
public void operate();
}
然后再写三个实现类,有三个妙计嘛:
/**
* Created by xpeng on 2018/4/30.
* 找乔国老帮忙,使孙权不能杀刘备
*/
public class BackDoor implements IStrategy {
@Override
public void operate() {
Log.e("xyz"," 找乔国老帮忙,使孙权不能杀刘备 ");
}
}
**
* Created by xpeng on 2018/4/30.
* 求吴国太开个绿灯
*/
public class GiveGreenLight implements IStrategy {
@Override
public void operate() {
Log.e("xyz"," 求吴国太开个绿灯,放行 ");
}
}
/**
* Created by xpeng on 2018/4/30.
* 孙夫人断后,挡住追兵
*/
public class BlockEnemy implements IStrategy {
@Override
public void operate() {
Log.e("xyz"," 孙夫人断后,挡住追兵 ");
}
}
好了,三个妙计有了,那需要放进锦囊啊:
/**
* Created by xpeng on 2018/4/30.
*/
public class JinNang {
//构造函数,你要使用那个妙计
private IStrategy strategy;
public JinNang(IStrategy strategy){
this.strategy = strategy;
}
//使用计谋了,看我出招了
public void operate(){
this.strategy.operate();
}
}
好咯,最后就是赵云,我们云哥来执行咯,周郎妙计安天下,赔了夫人又折兵咯。
JinNang jinNang;
//刚刚到吴国的时候拆开第一个
Log.e("xyz","刚刚到吴国的时候拆开第一个");
jinNang = new JinNang(new BackDoor());
jinNang.operate();//拆开执行
//拆开第二个
Log.e("xyz","老刘不想回去了");
jinNang = new JinNang(new GiveGreenLight());
jinNang.operate();
//拆开第三个
Log.e("xyz"," 孙小妹上 ");
jinNang = new JinNang(new BlockEnemy());
jinNang.operate();
/**
* 策略模式的好处:体现高内聚低耦合
* 还有一个扩展性,也就是OCP原则,策略类可以继续增加下去
*/
策略模式的优点:体现高类聚低耦合的特性,具有扩展性,也就是OPC原则,这个例子中只要修改JinNang.java就可以了。