优、缺点

  优点:
    1、可以动态的改变对象的行为
  缺点:
    1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类

    2、策略模式将造成产生很多策略类

将变化的东西定义成一个接口(针对接口编程),有多少中策略就有多少个实现类(这也是上面缺点2的原因),然后在需要用到该变化东西的类里面定义该成员变量即可引入(组合),自行使用相应的实现策略。

下面举例说明

每种动物都有不同的叫声,动物的叫声是变化的,所以可以使用策略模式

首先定义策略接口(BleatBehavior)

//叫声类

public interface BleatBehavior{

public void bleat();

}

狗叫和猫叫分别实现BleatBehavior

//狗叫类

public class BarkBehavior implements BleatBehavior{

public void bleat(){

System.out.println("汪汪");

}

}

//猫叫类

public class MiaowBehavior implements BleatBehavior{

public void bleat(){

System.out.println("喵喵");

}

}

//动物类

public class Animal {
    public BleatBehavior bleatBehavior;
    //动态设置动物怎么叫
    public void setBleatBehavior(BleatBehavior bleatBehavior) {
        this.bleatBehavior = bleatBehavior;
    }

public void performBark() {
        bleatBehavior.bleat();
    }

}

//狗类

public class Dog extends Animal{

}

//测试类

public class Test {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.setBleatBehavior(new BarkBehavior());
        dog.performBark();
    }
}

java设计模式之-策略模式相关推荐

  1. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  2. Java设计模式之策略模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  3. Java设计模式之策略模式+工厂模式+模板模式

    Java设计模式之策略模式+工厂模式+模板模式 1.策略模式+工厂模式+模板模式 个人的理解:实际开发工程中,一些业务很复杂的逻辑使用很多的 if 或者 if···else 语句,不利于维护和扩展,为 ...

  4. 【Java设计模式】策略模式

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识 策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法.比如每 ...

  5. Java 设计模式之策略模式

    一.了解策略模式 1.1 什么是策略模式 策略模式 (Strategy Pattern) 是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换.此模式让算法的变化独立于使用算法的客 ...

  6. java解决策略膨胀_折腾Java设计模式之策略模式

    简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. 意图 定义一 ...

  7. 【设计模式】java设计模式之 -- 策略模式

    对于代码中总是会有需要变化的部分和需要固定不变的部分.对于需要变化的部分,一般可以采用继承的方式,让子类对父类的方法进行重写,以改变已有的行为:如果变化的部分并不是所有子类都必须要有的,那就可以采用接 ...

  8. Java设计模式之策略模式---写的比较有趣,推荐大家看看

    原文:http://blog.csdn.net/jason0539/article/details/45007553 背景 在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据 ...

  9. 《Java设计模式之策略模式》

    <二 >策略模式   相信很多人都玩过魔兽世界这款游戏,它里面的战士有三种姿态:防御.狂暴.战斗,那么在不同的场景下我们需要使用不通的姿态,比如当MT抗怪就需要使用防御姿态,战场需要使用战 ...

  10. Java设计模式之——策略模式

    策略模式的简单介绍 在软件开发中常常遇到这样的情况:实现某一个功能可以有多种算法或者策略,我们根据事件情况选择不同的算法或者策略来完成该功能.例如,排序算法,可以使用插入排序.归并排序.冒泡排序等. ...

最新文章

  1. [译] 学习 JavaScript:9 个常见错误阻碍你进步
  2. gsea结果分析图怎么看_数据分析怎么做?看这篇就够了!
  3. python中奇数怎么表示_如何在python输出数据中的奇数
  4. SpringCloud微服务:阿里开源组件Nacos,服务和配置管理
  5. 云计算产业迎利好 未来五年信息化发展蓝图公布
  6. Java流程控制01 用户交互Scanner
  7. 邢台职业技术学院计算机专业分数线,邢台职业技术学院录取分数线2021是多少分(附历年录取分数线)...
  8. 站在“巨人”的肩膀上运维
  9. python安装过程的一些问题解决方案
  10. 并行算法第三讲:稠密矩阵乘法
  11. batch入门教程(4)
  12. 连接oracle数据库代码,oracle数据库的连接代码
  13. 前端综合学习笔记---异步、ES6/7、Module、Promise同步 vs 异步
  14. VirtualBox6.0安装及配置
  15. pymongo根据ObjectId 查找文档记录
  16. iTerm2安装Zmodem工具支持rz和sz命令
  17. 免费好用的DiffMerge工具大总结
  18. OpenJudge1661:Bomb Game(翻译 day 6)
  19. android 退出 动画效果,Activity进入和退出动画的实现
  20. python的xlrd读取Excel数据失败: raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported‘) ...

热门文章

  1. 数据结构与算法——栈( Stack )
  2. 计算机怎么发音乐,有哪些方法可以把歌曲发送到远方的朋友的手机上?
  3. kind安装k8s集群
  4. Excel如何实现行列转换及行倒置
  5. 开发3dMax插件的方法和应用
  6. c语言工业设计中的案例,工业设计中CMF为什么这么重要?看看设计案例就知道了!...
  7. 阙值,阈值,阀值,傻傻分不清
  8. 一个屌丝程序猿的人生(六十一)
  9. 一个据说可以让瑞星ravmond.exe崩溃的网站
  10. linux ansys172 卸载,基于ANSYS 经典界面的密封垫片的加载-卸载仿真