软考高级系统架构设计师(九) 作文模板-论设计模式及其应用(未完待续)

目录

掌握的知识点

创建型

结构型

行为型


掌握的知识点

  • 设计模式分为哪3类

 

  • 每一类包含哪些具体的设计模式

创建型

创建型模式是对对象实例化过程的抽象,他通过抽象类所定义的接口,封装了系统中对象如何创建、组合等信息

 

创建型模式主要用于创建对象,做到了软件模块跟对象的创建无关联

包括的设计模式有:

  • 抽象工厂模式
  • 建造者模式
  • 工厂方法模式
  • 原型模式
  • 单例模式

结构型

结构型模式主要用于如何组装已有的类和对象,已获得更大的结构,一般借鉴封装、代理、继承等概念讲一个或者多个类进行组合、封装,已提供统一的外部视图或新的功能。

 

主要负责处理类或对象之间的关系,将类和对象进行有效组织,形成良好的体系结构

主要的模式包括:

  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰器模式
  • 外观模式
  • 享元模式
  • 代理模式

行为型

该模式主要用于对象之间的职责以及提供的服务的分配,不仅描述对象或类的模式,还描述他们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任一对象都无法单独完成的任务。

 

主要处理类和对象之间的交互方式,以及如何为类和对象分配职责进行描述

主要的模式包括:

  • 责任链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 模板方法模式
  • 访问者模式

例子:

由于传统的结构化的软件设计方法不符合面向对象的设计原则,无法很好地实现高内聚低耦合的要求,模块之间过于紧密,给软件扩展和维护带来很多困难,这种情况下设计模式的出现和广泛应用给问题的解决提供了一种有效的方法,通过利用设计模式,可帮助开发者利用已有的设计方法,设计出结构合理、易于复用和可维护的软件,当用户需求发生改变时,可通过修改少量代码或不修改原有代码即可满足新的需求,增强了系统的可修改性和稳定性,降低系统开发成本。

strategy,属行为型,定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可独立于使用它的用户而变化。在监控模块的告警功能上,我们监控的各软件的前端界面上可由用户配置接收告警信息的方式,例如默认钉钉另有短信、微信、电话语音,定时任务在监控到有异常且满足发告警的情况下,后端代码会获取到用户配置的信息,根据配置信息调用指定的策略发送告警信息,具体实现是,先抽象出基类class AlarmSender,子类扩展基类class DingSender(AlarmSender)、class SMSSender(AlarmSender)等,并在子类中定义具体实现def send(self, info),假设当前有RabbitMQ告警且用户配置的是默认钉钉方式,则在发告警时的代码为先实例化mq_ins = MQInfo(info='告警内容', way=[DingSender]),way为具体的发告警的方式,再调用mq_ins.way.send(info)完成发送告警。使用这种模式我们发现,发告警的方式(即算法)可自由切换,将发告警的类名作为参数传入即可,这也是依赖抽象类设计接口的好处之一,还减少代码冗余,扩展性好,移植方便,使用灵活。

例子2:

策略模式:

在系统中,设计到住户缴费的功能,目前的线上缴费渠道有多种,如微信,支付宝,银联支付等多种。各个支付渠道的算法又不相同,起初我们用多重条件判断,涉及各个渠道支付实现的算法又包含重条件判断,这样定义后,发现代码不够简洁,也不利于维护,经过分析后,我们选择采用策略模式,首先定义了一个paystrategy接口作为抽象角色,然后定义了如alipaystrategy,wechatpaystrategy,unicompaystrategy具体角色,这些具体实现类里封装了对于支付方式的算法,并且这些类实现paystrategy了接口。定义了paycontextstartegy,该类引用了paystrateg.当web请求支付,并且带有支付方式的pay_code; controller接到请求后,使用paycontextstartegy调用具体的支付类如alipaystategy,wechatpaystategy,uniompaystrategy.通过使用策略模式,我们实现了不同方式的支付自由切换,避免了多次条件判断,利用组合代替继承,将算法的选择和算法的实现分开,降低了程序间的耦合度,具有很好的扩展型和可维护型。

例子3:

责任链模式:责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

测试平台: 

请求---拼装公共参数(环境信息,公共配置)----替换个性化参数---替换上下文参数

 参考:责任链设计模式(职责链模式)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/34036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Buildroot 取消默认QT桌面-迅为RK3588开发板

本小节将讲解如何取消掉默认的 qt 桌面。 首先对开发板进行上电,开发板正常启动后,使用命令“cd /etc/init.d”进入到/etc/init.d 目录 下,然后使用以下命令对开机自启动脚本 rcS 进行查看,如下图所示: vi rcS 从上…

视觉SLAM十四讲需要提前知道的数学基础知识

学习视觉SLAM十四讲之前的必备数学基础知识 1. 正交矩阵2. 线性关系3. 求矩阵的逆4. 叉乘5.反对称矩阵6. 复数 1. 正交矩阵 定义: 设n阶矩阵A满足AATATAI ,则称A为正交矩阵 性质: 以下为手写,从小字丑,请多担待。。 …

红色通信史(一):红色通信的萌芽

1927年4月和7月,蒋介石、汪精卫分别在上海、武汉发动“四一二”、“七一五”反革命政变,实行“清党”、“分共”,大肆逮捕和杀害中共党员,制造“白色恐怖”。 面对敌人的残酷镇压,我党决定创建自己的革命军队&#xff…

元宇宙装备展正式拉开帷幕,深眸科技CEO周礼出席产业论坛发表主题演讲

6月27日,一场令人期待已久的工业元宇宙盛会在昆山国际会展中心拉开帷幕,大会由昆山市人民政府主办,昆山市工业和信息化局、赛迪工业和信息化研究院集团(苏州)有限公司联合承办,并得到了十数家单位的支持&am…

计算机网络那些事之 MTU 篇 pt.2

哈喽大家好,我是咸鱼 在《计算机网络那些事之 MTU 篇 》中,咸鱼跟大家介绍了 MTU 是指数据链路层能够传输的最大数据帧的大小 如果发送的数据大于 MTU,则就会进行分片操作(Fragment);如果小于 MTU&#x…

Git安装及使用图文教程详解(附带安装文件)

Git安装及使用图文教程详解(附带安装文件) 原创:丶无殇  2023-06-26 文章目录 下载安装下载安装验证安装成功版本查看 基础指令Git常用指令【首次必须】设置签名用户、邮箱1.初始化本地仓库2.查看本地库状态3.创建文件4.添加文件至暂存区5…

maven打包本地jar到项目中

在maven项目中&#xff0c;我们的项目依赖一般取自local的repository或者远程的repository&#xff0c;比如下面这个配置&#xff1a; maven <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> &l…

C++11新特性(5):多线程

学习C11&#xff0c;根据网上资料的知识总结。 1. 线程创建 1.1 初始函数 #include <iostream> #include <thread> void myfunc(int &a) {cout << "a in myfunc:" << a << endl; }int main() {int a 1;std::thread mythread(…

C1. Make Nonzero Sum (easy version) - 思维

分析&#xff1a; n一但是奇数就一定不行&#xff0c;因为无论有多少-1和1都会导致最后的和是-1或1&#xff0c;每次断开一个区间会改变2&#xff0c;所以一定不行&#xff0c;直接输出-1。 其次&#xff0c;如果数组满足题意也可以一个一个输出每一个下标&#xff0c;遍历数组…

flask socket版本问题

1、版本问题 问题解决 根据官方给定的兼容版本&#xff0c;从socket.io官网CDN下载最新的4.4.1版本js文件&#xff0c;https://cdn.socket.io/。 python-engineio使用版本。需要更新的javascript.socketio包&#xff0c;具体可对照官方文档Requirements部分末尾 https://flask-…

ansible实训-Day3(playbook的原理、结构及其基本使用)

一、前言 该篇是对ansible实训第三天内容的归纳总结&#xff0c;主要包括playbook组件的原理、结构及其基本使用方式。 二、Playbook 原理 Playbook是Ansible的核心组件之一&#xff0c;它是用于定义任务和配置的自动化脚本。 Ansible Playbook使用YAML语法编写&#xff0c;可…

帆软 FineReport 绘制漏斗图

七一建党节&#xff0c;祝党生日快乐&#xff01; 夏日炎炎&#xff0c;周末在家&#xff0c;想起在用帆软做页面展示的时候&#xff0c;使用到了漏斗图&#xff0c;记录下来&#xff0c;方便查看。 以订单销量变化为例&#xff0c;分为五个阶段&#xff0c;商品浏览人数&#…

PDF如何转换成Word?PDF转Word方法分享!​

PDF大家都不陌生了吧&#xff1f;作为打工人&#xff0c;学生党的大家都知道&#xff0c;PDF是现在不可或缺的文件传输工具之一&#xff0c;不仅可将文档转为Word&#xff0c;还可以转成excel,ppt等各种形式&#xff0c;其重要性不言而喻&#xff0c;那么今天小编就跟大家具体说…

【MySQL】表的约束

目录 一、空属性 二、默认值 三、列描述 四、zerofill 五、主键 六、自增长 七、唯一键 八、外键 九、综合案例 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻…

NSQ 实现逻辑探秘

1 什么是 NSQ NSQ 是一个消息队列中间件&#xff0c;用 go 实现&#xff0c;有如下特点&#xff1a; 分布式&#xff1a; 它提供了分布式的、去中心化且没有单点故障的拓扑结构&#xff0c;稳定的消息传输发布保障&#xff0c;能够具有高容错和高可用特性。 易于扩展&#xf…

星辰秘典:揭开Python项目的神秘密码——2048游戏

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;html css js&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;你好&#x…

深度学习与神经网络

文章目录 引言1. 神经网络1.1 什么是神经网络1.2 神经元1.3 多层神经网络 2. 激活函数2.1 什么是激活函数2.2 激活函数的作用2.3 常用激活函数解析2.4 神经元稀疏 3. 设计神经网络3.1 设计思路3.2 对隐含层的感性认识 4. 深度学习4.1 什么是深度学习4.2 推理和训练4.3 训练的相…

python语法(高阶)-多线程编程

""" 演示多线程编程的使用 """ import time import threadingdef sing(msg):while True:print(msg)time.sleep(1)return Nonedef dance(msg):while True:print(msg)time.sleep(1)return Noneif __name__ __main__:# 创建一个唱歌的线程&#xf…

html实现好看的多种风格导航菜单(附源码)

文章目录 1.设计来源1.1 顶部导航菜单1.1.1 界面风格1-一二级连体导航菜单1.1.2 界面风格2-二级导航下拉框1.1.3 界面风格3-系统开始风格1.1.4 界面风格4-购物类导航菜单1.1.5 界面风格5 - 带搜索扩展的导航条1.1.6 界面风格6-火热效果多级导航条 1.2 悬浮按钮菜单1.2.1 界面风…
最新文章