三国演义中,诸葛亮的足智多谋,神机妙算,不得不让人佩服,能把周瑜这种智慧型的人物气死已经十分了得,其中诸葛亮给了赵云3个锦囊妙计让周瑜赔了夫人又折兵的堪称金典,现在用代码来演示一下这个过程。
抽象策略类
public interface IStrategy
{
public void excute();
}
具体策略类(第一个妙计)
public class FristStrategy implements IStrategy
{
@Override
public void excute()
{
// TODO Auto-generated method stub
System.out.println("找乔国老开后门");
}
}
具体策略类(第二个妙计)
public class SecondStrategy implements IStrategy
{
@Override
public void excute()
{
// TODO Auto-generated method stub
System.out.println("求吴国太开绿灯,放行!");
}
}
具体策略类(第二个妙计)
public class ThirdStrategy implements IStrategy
{
@Override
public void excute()
{
// TODO Auto-generated method stub
System.out.println("孙夫人断后,挡住追兵");
}
}
锦囊(装妙计)
public class Context
{
IStrategy strategy ;
public Context(IStrategy strategy)
{
this.strategy = strategy;
}
public void doSomething()
{
this.strategy.excute();
}
}
赵云
public class ZhaoYun
{
public static void main(String[] args)
{
Context context ;
System.out.println("赵云刚到吴国");
System.out.println("拆开第一个妙计");
context = new Context(new FristStrategy());
context.doSomething();//执行妙计
System.out.println("拆开第二个妙计");
context = new Context(new SecondStrategy());
context.doSomething();
System.out.println("后面小兵追来了");
System.out.println("拆开第三个妙计");
context = new Context(new ThirdStrategy());
context.doSomething();
}
}
执行结果:
赵云刚到吴国
拆开第一个妙计
找乔国老开后门
拆开第二个妙计
求吴国太开绿灯,放行!
后面小兵追来了
拆开第三个妙计
孙夫人断后,挡住追兵
三个妙计就搞得孙权赔了夫人又折兵,上面的描述过程就是策略模式。
策略模式
策略模式也叫做政策模式,定义如下:Define a family of algorithms, encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法封装起来,使他们之间可以互换。)
角色
Context角色:也叫上下文角色,承上启下的作用,屏蔽高层对策略,算法的直接访问,封装肯能存在的变化,就像装妙计的锦囊。
Strategy抽象策略角色:策略,算法家族的抽象。
ConcreteStrategy具体策略角色:实现抽象策略中的操作,含有具体的算法。
策略模式的优点
算法可以自由切换
避免使用多重条件判断
扩展性良好
策略模式缺点
策略类数量增多
所有策略类都需要对外暴露