再上一篇文章《设计模式之策略模式》中,我们通过模拟鸭子项目,了解了什么是策略模式,怎么使用策略模式。本文将通过鸭子项目的学习,对策略模式进行总结。

策略模式:

分别封装行为接口,实现算法族,超类(父类)里放行为接口对象,

在子类里具体设定行为对象。

原则就是:

分离变化部分,封装接口,基于接口编程各种功能。

此模式让行为算法的变化独立于算法的使用者。

策略模式总结:

1:策略模式三要素:

A:接口类。策略接口或是策略抽象类。

B:实现策略接口的具体策略类

C:context上下问。持有具体策略类的实例,并负责调用相关的算法。

来看看duck项目中三个对应

A:对应的就是FlyBehavior和QuackBehavior两个抽象类

B:具体实现策略类就是QuackBehavior的两个实现类及FlyBehavior接口的两个实现类

C:上下文,是由具体策略类的实例。GreenHeadDuck和RedHeadQuck

2:策略模式注意点

2.1:要分析出项目中变化部分与不不变化的部分(如duck项目中的Fly及Quack就是变化的)

2.2:多用组合少用基础;

用行为类组合,而不是行为的继承。更有弹性

3:策略模式优缺点

策略模式优点

可以自由切换算法

避免了多条件的判断

扩展性好可以定义新的算法提供给使用者

策略模式缺点

算法类数量增多,每个算法都是一个类

算法要对外安全暴露,因为使用者来决定是用哪个算法,必然要了解算法内部做了什么。

策略设计模式_设计模式之策略模式总结相关推荐

  1. 策略设计模式_设计模式之策略者模式

    策略者模式简介 策略者模式定义一个算法接口,并由其实现类去实现,使得每一个算法都得到封装,并让他们可以相互替换.这是一种行为型模式.策略者模式降低了算法行为和环境角色的耦合度,使得算法可以独立发生变化 ...

  2. 工厂设计模式和策略设计模式_设计模式:策略

    工厂设计模式和策略设计模式 这次我想谈谈策略设计模式 . 通过这种方式,我开始撰写有关行为设计模式的文章. 这种模式表示对象之间的某些交互模式,以使代码更灵活且组织得更好.此方法的最本质点是对象之间的 ...

  3. c++ 设计模式_设计模式行为型:观察者模式(ObserverPattern)

    定义对象之间的一种一对多依赖关系,使得每一个对象发生状态的变化时,其相关依赖对象皆得到通知并被自动更新,又称为发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模 ...

  4. 策略设计模式_设计模式之 策略模式

    设计模式的出现好像都是为了解决一个问题----表现和行为分离. 策略模式的定义 封装一系列的方法,在合适的条件下,调用相应的方法. 策略模式的代码表现 假设我们要计算某些指标 var cateInde ...

  5. 模板设计模式_设计模式-模板方法模式

    一.模板方法模式的定义 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计 ...

  6. 状态模式 设计模式_设计模式:状态

    状态模式 设计模式 本文将介绍状态设计模式 . 它是行为设计模式之一 . 您无需了解许多理论即可了解模式的主要概念. 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用 ...

  7. php设计模式原型模式,原型模式_设计模式_设计模式之原型模式 - Lane Blog

    10 8 Clicks: 6614 Date: 2014-04-21 21:48:35 Power By 李轩Lane 原型模式提取重复功能,避免了程序员喜欢复制粘贴的坏习惯.设计模式中的原型模式就是 ...

  8. 状态机设计模式_设计模式-代理/状态机模式

    代理模式 是使率非常高的模式: 为其它对象提供一种代理以控制这个对象的访问.该模式也称为委托模式,在使用的时候代理模式可以为我们提供非常好的访问控制. 如下代码 interface IGamePlay ...

  9. 模板设计模式_设计模式实用又简单的模板模式

    这篇文章纯科普向,如题,对这方面了解的可以绕道了,不耽误大家时间了哈 -----------------------------------人工分割线------------------------- ...

最新文章

  1. DotNetTextBox V2.0 Web Control(ASP.NET2.0 增强型TextBox控件,完全支持AJAX.NET)
  2. ES6 必须要用的数组Filter() 方法,不要再自己循环遍历了!!!
  3. ai字体行间距怎么调整_字体基础知识(一)
  4. Mysql 行前自动排序_mysql 取得行号后再排序
  5. Java Web-网页基础-HTML-URL
  6. SharePoint 2010新体验9 - 内容管理器(Content Organizer)
  7. 29. Element ownerDocument 属性
  8. centos7配置php-fpm,centos7 配置php-fpm
  9. dell无线网卡驱动安装
  10. Android在线电影播放器案例
  11. Mac系统下替换百度云的倍速播放器-Quicktime player 的使用方法
  12. Win8.1的IE缓存文件夹哪里去了?细说系统安装分区里那些带箭头的文件夹
  13. 计算机原理处理器,多处理器结构-微计算机原理-电子发烧友网站
  14. Photoshop教程实例讲解
  15. Python获取逐浪小说内容
  16. lae界面开发工具入门之介绍十一--安卓系统如何编译打包?
  17. 【开源】SoDiaoEditor 可能是目前最好用的开源电子病历编辑器(B/S架构)
  18. 网络基础 -- 网络分层与三次握手、四次挥手
  19. 10项目管理--项目沟通管理
  20. python实现图像添加噪声、噪声处理、滤波器代码实现

热门文章

  1. 实地集团和广州移动发布首个独立组网5G全场景智能社区
  2. 虎牙、斗鱼正式达成合并协议;​中国广电正式成立,或催生5G发展新格局;Linux 5.9 释出|极客头条
  3. 真强啊!建议每一个打算学Java的人都来看看!
  4. 如何仅用300行代码完成spring基本框架?
  5. 31 岁的我为何会在创业成功后选择编程?
  6. 十步教你如何接手别人的代码!
  7. 不可不知的 5 种 JavaScript 代码编辑器
  8. 悲苦手机命,“熬”在新零售
  9. 高性能访客记录系统如何设计?
  10. “围剿”余额宝!微信零钱通能否逆袭成功?| 畅言