2.Strenge接口,所有的策略都是实现它的方法;

p

ackage cn.xiaobo.Strenge;
/**
* 一个策略接口,内部只需要定义一个方法就行;实现由具体的子类实现;
* @author Administrator
*
*/
public interface Strenge {
void operate();
}
3.BackDoor 策略1找乔国老帮忙防止被周瑜杀害,
package cn.xiaobo.Strenge;
/**
* 策略1找乔国老帮忙防止被周瑜杀害;
* @author Administrator
*
*/
public class BackDoor implements Strenge{
@Override
public void operate() {
System.out.println("找乔国老帮忙");
}
}

4.策略2找乔国老开绿灯,放行

package cn.xiaobo.Strenge;
/**
* 策略2找乔国老开绿灯,放行;
* @author Administrator
*
*/
public class GiveGreenLight implements Strenge{
@Override
public void operate() {
System.out.println("找乔国老开绿灯");
}
}

5.策略3让周瑜妹妹拦住追兵,逃出追杀

package cn.xiaobo.Strenge;
/**
* 策略3让周瑜妹妹拦住追兵,逃出追杀;
* @author Administrator
*
*/
public class BlockEnemy implements Strenge{
@Override
public void operate() {
System.out.println("让周瑜妹妹挡住追兵");
}
}

6.将三个策略放入锦囊,只要将对应的策略取出即可

package cn.xiaobo.Strenge;
/**
* 将三个策略放入锦囊,只要将对应的策略取出即可
* @author Administrator
*
*/
public class StrangeApp {
private Strenge iStrenge;
public StrangeApp(Strenge strenge) {
// TODO Auto-generated constructor stub
this.iStrenge=strenge;
}
public void operate(){
this.iStrenge.operate();
}
}

7.执行策略,赵云是策略的执行者,只需要将一个个的策略执行就可以

package cn.xiaobo.Strenge;
public class StrangeMain {
/**
* 赵云是策略的执行者,只需要将一个个的策略执行就可以;
* @param args
*
*/
public static void main(String[] args) {
//第一条策略
BackDoor backDoor=new BackDoor();
//第二条策略
GiveGreenLight giveGreenLight=new GiveGreenLight();
//第三条策略
BlockEnemy blockEnemy=new BlockEnemy();
System.out.println("刚到吴国");
StrangeApp strange1=new StrangeApp(backDoor);
strange1.operate();
System.out.println("\n");
System.out.println("乐不思蜀");
StrangeApp strange2=new StrangeApp(giveGreenLight);
strange2.operate();
System.out.println("\n");
System.out.println("媳妇断后");
StrangeApp strange3=new StrangeApp(blockEnemy);
strange3.operate();
System.out.println("\n");
}
}

8.优点与缺点

* 优点

* 策略模式提供了管理相关的算法族的办法。

* 策略类的等级结构定义了一个算法或行为族。

* 恰当使用继承可以把公共的代码移到父类里面,从而避免代码重复

*

* 使用策略模式可以避免使用多重条件(if-else)语句。

* 多重条件语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,

* 统统列在一个多重条件语句里面,比使用继承的办法还要原始和落后。

*

* 缺点

* 由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很可观

*

* 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。

* 换言之,策略模式只适用于客户端知道算法或行为的情况