软件工程与计算总结(十六)详细设计的设计模式

news2024/12/30 1:40:50

一.设计模式基础

某种意义上来说,设计模式就是设计经验的总结~

设计模式不是简单的经验总结,更不是无中生有,它是经过实践反复检验、能解决关键技术难题、有广泛应用前景和能够显著提高软件质量的有效的经验总结

每个模式都不是独立的,大量设计模式互相关联,形成一种生产性语言,即大量设计模式组合在一起,能够相互配合完成高质量的设计~(目前的设计模式还没有达到这种程度)

二.可修改性及其基本实现机制

在详细设计 阶段,设计模式可以用来提高质量,特别是提高可修改性,包含如下几个方面的质量:

  • 狭义可修改性——对已有实现的修改
  • 可扩展性——对新的实现的扩展
  • 灵活性——对实现的动态配置

为了实现上述质量,需要能够将接口与实现分离,在java中的两种方式如下:

  • 通过接口和实现该接口的类完成接口与实现的分离:

  • 通过子类继承父类,将父类的接口和子类的实现相分离:

在很多设计模式中,大量地利用了上述两种实现与接口分离的方式~

三.策略模式

1.典型问题

大规模连锁店的例子:

2.设计分析

  • 首先,可以把上下文和策略分割为不同的类,每个类实现不同的职责,上下文context类负责满足需求,它除了包含策略信息之外可能还有其他需求职责,而策略类Strategy只负责复杂策略的实现~
  • 其次,上下文类和策略之间的关系使用组合比继承更合适
  • 最后,各种策略则在具体策略类中提供,上下文拥有统一的策略接口~

使用的设计原则和解释:

  • 减少耦合:减少策略的使用类和策略的实现类直接的耦合~
  • 依赖倒置:策略的使用类依赖的是策略的接口,而非策略的实现类

3.解决方案

参与者与协作:参与者包括上下文、策略和具体策略,之间的协作包括context和strategy相互协作完成整个算法~

应用场景:策略模式有以下应用场景

应用注意点:应该注意以下几点

4.模式实例

四.抽象工厂模式

1.典型问题

需要依赖一个专门类——工厂的创建方法,工厂模式就是为对象的创建提供一个接口,将具体创建的实现封装在接口之下,这样具体创建的实现的改变就不会对client类产生影响~

2.设计分析

使用的设计原则和解释:

  • 职责抽象:抽象对于对象创建的指针
  • 接口的重用:提供对于对象创建的接口

3.解决方案

4.模式实例

五.单件模式

1.典型问题

在有些场景中,对于某个类,在内存中只希望有唯一一个对象存在,每次想要得到这个类的

2.设计分析

使用的设计原则和解释:

  • 职责抽象:隐藏单间创建的实现

3.解决方案

4.模式实例

六.迭代器模式 

1.典型问题

如果需求发生改变,新的需求要对这个集合进行快速查询,此时用链表就不太适合了,用三列集合就更加合适;当只希望挨个访问某个聚合结构,而并不希望知道到底是什么样的聚合结构,这个时候迭代器就会帮助我们~

2.设计分析

使用的设计原则和解释:

  • 减少耦合:减少遍历的使用类和遍历的实现类直接的耦合
  • 依赖倒置:遍历的使用类依赖的是策略的接口,而并非遍历的实现类

3.解决方案

4.模式实例


(这一章些许云里雾里,之后如果有时间出单独的设计模式专栏......)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Word保存后内容丢失?4个方法,有效找回数据!

“我利用Word文档写了一份重要的工作报告。明明已经保存了,但是里面的内容却莫名其妙丢失了。这可怎么办呢?有什么方法可以找回丢失的Word内容吗?” Word作为一个常用的办公工具,为我们的工作提供了很多的便利。但在使用Word时&am…

uniapp+vue3+ts开发微信小程序+抖音小程序等跨平台应用入门,环境搭建

使用之前需要安装hbuilder和微信开发者工具,hbuilder是uniapp的开发工具,微信开发者工具是微信官方的小程序开发平台: hbuilder下载地址:HBuilderX-高效极客技巧 微信开发者工具:微信开发者工具下载地址与更新日志 |…

模块电源(四):可调DC-DC

一、DC-DC典型应用 以DC-DC转换器SCT2432数据手册为例,典型应用电路如下图所示: 其中,输出电压为: , DC-DC转换器中, 反馈电压是指反馈回路中的信号电压,用于控制输出电压与设定电压之间的误差&…

LeetCode 137. 只出现一次的数字 II【哈希表;位运算;数字逻辑;DFA】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

【Linux基础】Linux 发展史

转载于 https://blog.csdn.net/weixin_45031801/article/details/133551510 文章目录 1、前言2、Linux 发展史2.1 UNIX 发展史2.1.1 C 语言对 UNIX 的影响 2.2 Linux 的诞生2.2.1 概述2.2.2 开源的优势2.3.3 系统结构内核层Shell层应用层 3、Linux 应用领域3.1 服务器领域3.2 …

Python算法练习 10.16

leetcode 437 路径总和III 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的&#xff…

SpringBoot集成Dubbo

1. 构建SpringBoot环境 1.1 创建一个duubo-spring-boot-demo项目 duubo-spring-boot-demo:是父工程,方便依赖管理duubo-spring-boot-demo-consumer:是服务消费方,继承父工程duubo-spring-boot-demo-provider:是服务提…

数据结构 2 第二章 线性结构 代码实现

头文件 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdlib.h>//malloc函数头文件 #include <time.h> #include <string.h> #include <limits.h> #include <ctype.h> #include <math.h> # include <stdio.h> 一、单链表 1.单链…

Segment Anything(论文解析)

Segment Anything 摘要1.介绍2 SAM任务SAM模型 摘要 我们介绍了“Segment Anything” (SA) 项目&#xff1a;这是一个新的任务、模型和数据集对于图像分割。使用我们高效的模型进行数据收集&#xff0c;我们构建了迄今为止最大的分割数据集&#xff08;远远超过其他数据集&…

C语言进行实验:通过程序实现线算图取值【支持VC++ 6.0编辑器环境运行】

背景&#xff1a; 一、实验目的和要求 1、能描述数据基本类型及其常量的表示方法&#xff1b; 2、会对变量进行定义及初始化&#xff1b; 3、能使用运算符与表达式对变量赋值&#xff1b; 4、会描述C语句的概念及种类、C语言常用的输入/出方式&#xff1b; 5、会设计顺序…

typora主题切换与推荐主题

在这篇博文中&#xff0c;我将向你展示如何给typora更换主题&#xff0c;并推荐几款出色的主题。通过这些主题的使用&#xff0c;你可以为你的typora编辑器增添一抹别样的风采&#xff0c;让你的写作体验更加美好、舒适。 typora替换主题的步骤非常简单&#xff0c;只需按照以…

科技资讯|苹果Vision Pro可通过手势ID检测不同用户

近日&#xff0c;美国专利局公布了苹果公司的一项专利申请&#xff0c;该专利申请涉及基于手部特征验证用户身份的技术。苹果指出&#xff0c;可能是多个家庭成员都想使用 Apple Vision Pro&#xff0c;系统必须识别不同的手势以控制 visionOS。在另一个示例中&#xff0c;苹果…

无频闪护眼灯哪个好?五款无频闪护眼台灯推荐

青少年的近视率持续升高&#xff0c;保护眼睛非常重要。台灯是用眼环境的必备品&#xff0c;而市面上款式多样不知如何购买。这期就来聊聊护眼台灯的选购问题&#xff01; 都说成人的世界不容易&#xff0c;社交网络上时常有人吐槽996工作制&#xff0c;但要知道的是现在的学生…

(vue)el-descriptions 描述列表无效

(vue)el-descriptions 描述列表无效 原因&#xff1a;element 的版本不够 解决&#xff1a;运行下面两个命令 npm uninstall element-ui //卸载之前安装的版本 npm i element-ui -S //重新安装解决参考&#xff1a;https://blog.csdn.net/weixin_59769148/article/details/1…

vector+算法sort与list+sort的效率比较,容易写错的地方原因探析

我写的代码&#xff1a; #include <iostream> using namespace std; #include <vector> #include <list> #include <algorithm> int main() {const int N 10000000;vector<int> v;list<int> l;for (int i 0; i < N; i){v.push_back(…

SpringCloud Gateway网关梳理

前言 在中大型系统中&#xff0c;Gateway网关发挥着关键的作用&#xff0c;Gateway可以运用在许多应用场景&#xff0c;如接口限流、日志监控、授权认证等等。下面对过往的Gateway知识做一个归纳与总结。 一、路由 路由是Gateway网关中的基础组件&#xff0c;它由一个org.sp…

C#开发的OpenRA游戏之金钱系统(2)

C#开发的OpenRA游戏之金钱系统(2) 在我们玩这个游戏时,就会发现每当创建一个新精炼工厂,就会带有一台采矿车,这是怎么样实现的呢? 这个就需要查看建筑物下面这个字段: FreeActor: Actor: HARV SpawnOffset: 1,2 Facing: 256 FreeActor就是标记为免费的物品,在这里

xdma axi-stream

xdma 回环 vivado 里有官方示例 fpga&#xff1a;pcie rx – axi-stream master – axi-stream slave – pcie tx 流程&#xff1a;电脑启动读取&#xff0c;然后电脑再在超时时间内写入。或者电脑启动写入&#xff0c;然后电脑再在超时时间内读出。只读取或只写入会报超时&am…

小程序开发平台源码系统+活动在线报名小程序功能 带完整的搭建教程

今天来给大家分享一下小程序开发平台源码系统的活动在线报名小程序功能。活动在线报名小程序是一种方便快捷的活动报名方式&#xff0c;可以通过小程序进行宣传和报名&#xff0c;让参与者可以方便快捷地进行报名和参加活动。小程序有完整的搭建教程&#xff0c;以下是部分功能…

【14】基础知识:React - redux

一、 redux理解 1、学习文档 英文文档&#xff1a;https://redux.js.org/ 中文文档&#xff1a;http://www.redux.org.cn/ Github: https://github.com/reactjs/redux 2、redux是什么 redux 是一个专门用于做状态管理的 JS 库(不是 react 插件库)。 它可以用在 react&am…