美文网首页程序员
戏说模式之:策略模式

戏说模式之:策略模式

作者: coder_ | 来源:发表于2017-10-26 21:14 被阅读0次

    定义

    策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

    理解

    上面的定义是百度抄的,反复读了好几遍也没在脑子里留下非常深的印象。一个很好的场景是,“见人说人话,见鬼说鬼话”,这里的“见人”“见鬼”就是不同的场景,而各个场景并不需要理解说话者每个场景的逻辑(相互隔离)。

    比如韦小宝见到康熙说:“陛下真是鸟生鱼汤”,见到毛十八说:“上刀山下火海在所不辞”,见到天地会的人会说:“替天行道,劫富济贫,反清复明”。而康熙并不知道韦小宝会说“反清复明”,同样毛十八也不知道韦小宝在官场说的奉承话。

    流程图

    class.png

    在这里定义了一个环境类Context用来对策略对象进行配置,使得调用者与接口隔离,调用者只需关心具体的场景即可。 IScrene场景接口,每个场景TianDiHui,Mao18,KangXi实现该接口中的speak这个方法。

    场景接口定义
    public interface IScene {
        public void speak();
    }
    
    实现类一(天地会)
    public class TianDiHui implements IScene {
        @Override
        public void speak() {
            System.out.println("替天行道,劫富济贫,反清复明");
        }
    }
    
    实现类二(毛18)
    public class Mao18 implements IScene {
        @Override
        public void speak() {
            System.out.println("上刀山下火海在所不辞");
        }
    }
    
    实现类二(康熙)
    public class KangXi implements IScene {
        @Override
        public void speak() {
            System.out.println("陛下真是鸟生鱼汤!");
        }
    }
    
    环境配置类
    public class Context {
        private IScene iScene;
    
        public Context(IScene iScene){
            this.iScene = iScene;
        }
    
        public void speak(){
            this.iScene.speak();
        }
    }
    
    具体调用类
    public class WeiXiaoBao {
        Context context;
        @Test
        public void think(){
            System.out.println("======遇到毛18======");
            context = new Context(new Mao18());
            context.speak();
            System.out.println("======遇到康熙======");
            context = new Context(new KangXi());
            context.speak();
            System.out.println("======遇到天地会成员======");
            context = new Context(new TianDiHui());
            context.speak();
        }
    }
    

    至此一个简单的策略模式设计完毕。

    策略模式优点

    1、可以动态的改变对象的行为
    2、可以避免使用多重条件转移语句

    策略模式缺点

    1、客户端(调用方)需要知道所有策略,并且知道具体需要使用哪个策略
    2、策略模式造成很多的策略类,每个具体策略类都会产生一个新类。

    相关文章

      网友评论

        本文标题:戏说模式之:策略模式

        本文链接:https://www.haomeiwen.com/subject/mkyauxtx.html