策略模式

问题的描述:

需求:开发一个鸭子游戏,能游泳,有外观,实现类图如下:

增加的需求:

1. 加入飞行功能

2. 加入呱呱叫的功能。。。等等,暂时的解决方式如下:

上线后出现了些问题:

1. 所有的鸭子都能叫吗?木头鸭子呢?

2. 所有的鸭子都能飞吗?木头鸭子呢?橡皮鸭子呢?

总结下,使用继承的缺点:

  1. 代码在多个子类中重复

  2. 运行时的行为不容易改变

  3. 很难知道鸭子的全部行为

  4. 改变会牵一发动全身,造成其他鸭子不想要的改变

  5. 。。。

好吧,我们引入接口来进一步修改,类图如下:

问题已经解决了,但是鸭子子类有40多种,我们修改fly方法,难道修改40种样本?以后的维护的坑有点大哦!

总结下,这种方式的缺点:

  1. 代码在多个子类中重复

  2. 维护成本提高(有40个子鸭子类,要修改fly方法需要改40次?)

  3. 。。。

问题不断,我们用设模式来解决这个问题,先看看定义:策略模式:定义算法族,分别封装起来,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

好,我们修改下,类图如下:

我们用这个模式解决了:

1. 鸭子行为的各种各样性(子类行为和超类没有直接的关系了,添加删除行为不影响继承体系)

2. 代码重用,维护问题(子类太多时修改行为特别麻烦,代码重复,只修改算算法组就搞定)

3. 动态修改行为(Setter和Getter方法来灵活配置行为)

4. 。。。

这章我们学到的设计原则:

设计原则1: 封装变化(找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起)。

设计原则2: 针对接口编程,而不是针对实现类

设计原则3: 多用组合,少用继承

转载于:https://blog.51cto.com/u2r2otkit/2096544

“Head First 设计模式“ :策略模式相关推荐

  1. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  2. 关于设计模式——策略模式-Strategy Pattern

    文章目录 1 策略模式 1.1 模拟鸭子 1.2 设计原则 1.3 整合行为 1.4 模拟鸭子代码的代码 1.5 动态设定行为 1.6 重新查看整体 1.7 继承和组合 1.8 总结 1.9 优劣期间 ...

  3. [设计模式] ------ 策略模式

    策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...

  4. java 策略模式 促销_java设计模式——策略模式

    一. 定义与类型 定义:针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换.策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能.当代码中 ...

  5. Springboot 使用设计模式- 策略模式

    前言 直白点,什么场景我们需要使用到设计模式- 策略模式. 在平常的springboot项目里面做CRUD,我们的习惯性基本是 一个mapper,一个service,一个serviceImpl. 但是 ...

  6. 李建忠设计模式——策略模式Strategy

    目录 1.策略模式定义 1.动机 2.模式定义 3.结构 2.实现例子 1.问题描述 2.代码实现 3.要点总结 4.参考 1.策略模式定义 1.动机 软件构建过程中,某些对象使用的算法可能多种多样, ...

  7. 15. 星际争霸之php设计模式--策略模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  8. Java设计模式-策略模式作业

    Java设计模式-策略模式作业,所有类和接口均在一个package内 文章目录 前言 一.作业内容 二.具体实现 1.类图 2.Strategy接口 3.PreCopyStrategy类 4.Post ...

  9. 设计模式-策略模式2.0

    设计模式-策略模式2.0 前面文章我们说过了传统的策略模式的实现,本文我们简单说下设计模式中的升级版的策略模式,策略模式2.0. 代码实现 talk is cheap show me the code ...

  10. 设计模式-策略模式(Strategy)-Java

    设计模式-策略模式(Strategy)-Java 目录 文章目录 1.前言 2.示例案例-电影票打折方案 3.策略模式概述 3.1.策略模式定义 3.2.策略模式结构 3.3.策略模式结构图中角色 3 ...

最新文章

  1. 高中上不上分数低学计算机,中考分数低该怎么办 上不了高中有什么出路
  2. 结构型模式之Proxy模式
  3. 401 - 未授权: 由于凭据无效,访问被拒绝。
  4. 【手写系列】透彻理解Spring事务设计思想之手写实现
  5. QT的QSGMaterialShader类的使用
  6. 24、jdbc操作数据库(1)
  7. 单元测试原来是这样的呼
  8. padding/border与width的关系
  9. SPOJ - LCS 后缀自动机入门
  10. css权威指南 读书笔记
  11. 人脸识别相关数据集介绍
  12. mybatis的缓存,看这一篇就够了!
  13. 服务器SN信息,查询服务器sn号
  14. 无线路由器WINS服务器,怎么创建和配置wins服务器
  15. 成功实现有线路由器和无线路由器连接上网
  16. WPF - 善用路由事件
  17. 谈谈 Primavera P6与Office Project(MSP)与区别
  18. 网络钓鱼攻击技术分析及防范
  19. Docker服务的停止命令(systemctl stop docker)
  20. 直播软件源码,实现一个简单的直播功能

热门文章

  1. LeetCode 775. Global and Local Inversions
  2. 【iOS】使用SQLite3的时候Swift3.、XCode8报错:Unsupported architecture - 'arm/arch.h'file not found - Could not
  3. showModalDialog模态对话框的使用详解以及浏览器兼容
  4. perl 如何判断变量为空
  5. 忆芯科技发布新一代国产主控芯片STAR1000P!4月完成量产版本
  6. linux部署tomcat8(基于centOS7)
  7. ubuntu13.04中把ibus中的中文拼音输入设为默认
  8. Oracle中的Date、TimeStamp和Interval(上)
  9. Silverlight 游戏开发小技巧:技能冷却效果1(Cooldown)
  10. Linux 命令(100)—— expr 命令