当前位置: 首页 > news >正文

23种设计模式总结(三)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

前面2节,我们主要介绍了构建型和结构型的设计模式,今天我们重点讲一下行为型。

策略模式

要点:一个策略的接口,若干个实现类,针对不同的情况,选择不同的策略实现来解决问题。

典型场景:在之前的社保项目当中,针对不同的参保人类型,它的各种险种的计算方式会有一些不同,多采用此种结构

实现难度:一般

广泛程度:比较广泛

 

模板方法模式

要点:其实,一个称之为模板的abstract类,当中的一部分计算过程是abstract,若干个子类,针对不同的情况,对abstract进行不同的实现。

典型场景:和策略模式差不多,区别在于,对于计算过程完全不同的场景,采用策略模式,一小部分不同的场景,采用模板方法模式。

实现难度:一般

广泛程度:比较广泛

 

我们其实可以把策略模式理解为一种特殊的模板方法模式,空模板。

 

观察者模式

要点:一个Observer的interface,多个Observer实现类,主题subject interface及实现类,能够动态添加删除observer,某些操作发生的时候,通知observer。

典型场景:系统发生某些时间的情况下,需要采用邮件、短信等形式通知相关干系人。

实现难度:一般

广泛程度:比较广泛

 

迭代子模式

略过,参考jdk当中集合类的iterator的使用和实现即可。

 

责任链模式

要点: 有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求。

典型场景:netty的handler pipeline

实现难度:一般

广泛程度:比较广泛

 

命令模式

要点:一个命令的发起者(invoker),一个命令的接受者(receiver),一个是命令本身(command)。

实现难度:比较难以理解

广泛程度:反正我很少用

 

 

转载于:https://my.oschina.net/dongtianxi/blog/796140

相关文章:

  • 一个WIndows Server 2008 R2 AD组策略复制排错过程(Warning 13508)
  • 两个基本概念 标称型数据和数值型数据
  • bootstrap 不兼容ie8 的问题
  • Frenetic Python实验(三)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • Java内存模型深度解析:重排序 --转
  • CentOS防火墙iptables的配置方法详解
  • 66哲理,哪一句让你茅塞顿开
  • 第八章   前七章总结考试
  • python中初始化实例属性
  • SpringMVC常用注解的用法
  • ionic ng-repeat 循环传值
  • Windows下xgboot安装
  • CentOS 6.3下nginx、php-fpm、drupal快速部署
  • Android ScrollView截图和图片保存到相册的方式
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Apache的80端口被占用以及访问时报错403
  • Bytom交易说明(账户管理模式)
  • Django 博客开发教程 8 - 博客文章详情页
  • es6--symbol
  • exif信息对照
  • Js基础——数据类型之Null和Undefined
  • maya建模与骨骼动画快速实现人工鱼
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SQLServer之创建数据库快照
  • Twitter赢在开放,三年创造奇迹
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 创建一个Struts2项目maven 方式
  • 从零开始学习部署
  • 记一次和乔布斯合作最难忘的经历
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 如何设计一个比特币钱包服务
  • 微信小程序填坑清单
  • 问题之ssh中Host key verification failed的解决
  • 小程序开发之路(一)
  • 小程序开发中的那些坑
  • 应用生命周期终极 DevOps 工具包
  • 带你开发类似Pokemon Go的AR游戏
  • #DBA杂记1
  • $ git push -u origin master 推送到远程库出错
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (Ruby)Ubuntu12.04安装Rails环境
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (三)elasticsearch 源码之启动流程分析
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)详解PHP处理密码的几种方式
  • (转载)跟我一起学习VIM - The Life Changing Editor