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

目录

掌握的知识点

创建型

结构型

行为型


掌握的知识点

  • 设计模式分为哪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.hqwc.cn/news/4774.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Cloud系列】-负载均衡(Load Balancer,LB)

【Spring Cloud系列】-负载均衡(Load Balancer,LB) 文章目录 【Spring Cloud系列】-负载均衡(Load Balancer,LB)一、什么是负载均衡(Load Balancer,LB)二、负载均衡的主要…

C/C++变量的四种存储类型(auto自动、static静态、extern外部、register寄存器)

喵~对于一个变量来说,有三个维度需要了解:作用域、链接和存储期 一、前言:1.1 作用域:1.1.1 块作用域:1.1.2 函数作用域:1.1.3 函数原型作用域:1.1.4 文件作用域: 1.2 链接&#xff…

Maynor的博客专家成长之路——暨2023年中复盘

文章目录 博客专家成长之路——暨2023年中复盘前言念念不忘的博客专家每天只做三件事敲代码写博客健健身 我的感悟 不足之处未来:和CSDN共同成长最后 博客专家成长之路——暨2023年中复盘 前言 ​ 2023年不知不觉已经过去了半年有余,也是时候作年中复盘…

TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING

本文也是属于LLM系列的文章,针对《TOWARDS A UNIFIED VIEW OF PARAMETER-EFFICIENT TRANSFER LEARNING》的翻译。 关于参数有效迁移学习的统一观点 摘要1 引言2 前言2.1 Transformer结构综述2.2 之前的参数高效调优方法综述 3 弥合差距-统一的视角3.1 仔细观察Pref…

容器技术概述

容器是一种轻量级的、操作系统级别的虚拟化技术,它允许我们在资源隔离的进程中运行应用程序及其依赖项。运行应用程序所需的所有必要组件都可以打包为单个可以复用的映像。当映像被执行时,它将运行在一个孤立的环境中,不会与宿主操作系统共享…

设计模式之结构型模式

本文已收录于专栏 《设计模式》 目录 概念说明大话设计模式结构型模式 各模式详解适配器模式(Adapter Pattern)桥接模式(Bridge Pattern)组合模式(Composite Pattern)装饰器模式(Decorator Patt…

刘汝佳samaのDLX详解

引入 精确覆盖问题(Exact Cover Problm) 有一些由整数 1~n 组成的集合 S 1 , S 2 , S 3 , … , S r S_1,S_2,S_3,…,S_r S1​,S2​,S3​,…,Sr​, 要求选择若干个集合 S i S_i Si​,使1~n 的每个整数恰好在一个集合中出现。比如&#xff0c…

基于JSP+Servlet的文件上传与下载

基于JSPServlet的文件上传与下载 一、系统介绍二、功能展示1.项目骨架2.单文件上传3.多文件上传4.下载文件1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于JSPServlet的文件上传与下载案例 项目架构:B/S架构…

Flutter学习四:Flutter开发基础(五)资源管理

目录 0 引言 1 资源管理 1.1 指定 assets 1.2 Asset 变体(variant) 1.3 加载 assets 1.3.1 加载文本 1.3.2 加载图片 1.3.2.1 声明分辨率相关的图片 1.3.2.2 加载图片 1.3.3 依赖包中的资源图片 1.3.4 打包包中的 assets 1.3.5 特定平台 as…

【Spring】— Spring MVC复杂数据绑定

目录 复杂数据绑定1.绑定数组2.绑定集合 复杂数据绑定 实际项目开发中,除了简单数据类型外,还会经常遇到一些比较复杂的数据绑定问题,比如数组的绑定、集合的绑定,接下来将具体讲解一下数组绑定和集合绑定的使用。 1.绑定数组 …

adb 工具

小白初如嵌入式的坑,对于串口调试工具,之前一直只知道有SecureCRT这一种方式; 但是在最近一次的使用过程中,发现抢占资源的情况出现,两个进程之间相互打架,这个时候需要 查看top(嵌入式板子资…

此导入从不用作值,必须使用 “import type“ ,因为 “importsNotUsedAsValues“ 设置为 “error“。

前言 最近电脑更新了一次系统,重启后在 VsCode中打开项目 ,发现原本正常的代码出现了一堆语法提示。网上搜了一下,没有找到关于此问题的回答,不知道我是不是第一个遇到的。在此记录一下这次的经历,如果有其他人遇到&a…