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

戏说模式之:策略模式

作者: 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、策略模式造成很多的策略类,每个具体策略类都会产生一个新类。

相关文章

  • 戏说模式之:策略模式

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

  • 行为型模式:策略模式

    LieBrother原文:行为型模式:策略模式 十一大行为型模式之五:策略模式。 简介 姓名 :策略模式 英文名 ...

  • PHP设计模式之策略模式

    PHP设计模式之策略模式

  • PHP设计模式之策略模式

    PHP设计模式之策略模式

  • 简说设计模式之策略模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是策略模式 策略(Strategy)模式...

  • 策略模式

    本文参考自: 《JAVA设计模式》之策略模式(Strategy) 1. 作用 策略模式属于对象的行为模式。其用意是...

  • 策略模式

    参考资料:漫话:如何给女朋友解释什么是策略模式? 设计模式之策略模式(实例+Demo) Java设计模式(8)——...

  • Java设计模式——策略模式

    Java设计模式之策略模式 这期分享的模式是策略模式是程序设计中最常用的了,因为开发工作中总是会使用到策略模式。 ...

  • 设计模式之策略模式

    设计模式之策略模式 一 策略模式定义 策略模式在百度百科中的解释是: 策略模式是指对一系列的算法定义,并将每一个算...

  • 策略模式 2018-11-04

    设计模式之策略模式 官方说明设计模式的3个角色: 环境角色:context , 持有一个策略的引用 抽象策略角色,...

网友评论

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

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