策略模式

  三国演义中,诸葛亮的足智多谋,神机妙算,不得不让人佩服,能把周瑜这种智慧型的人物气死已经十分了得,其中诸葛亮给了赵云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具体策略角色:实现抽象策略中的操作,含有具体的算法。

策略模式的优点
  算法可以自由切换
  避免使用多重条件判断
  扩展性良好

策略模式缺点
  策略类数量增多
  所有策略类都需要对外暴露

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值