设计模式(一)

ops/2024/10/29 21:51:31/

设计模式(一)

特点:可复用的面向对象软件

底层思维							设计者						抽象思维语言构造													  面向对象
编译转换													  组件封装
内存模型													  设计模式
运行状态													  架构模式

封装:隐藏内部实现

继承:复用现有代码

多态:改写对象行为

复杂性问题解决:

分解:

​ 分而治之,将大问题转为小问题,复杂问题分解多个简单问题

抽象:

​ 层次更高,处理复杂性有个通用的技术

tips:vector<Line> shapeVector;		// 没有用到多态性,不需要使用指针,对象即可vector<Shape*> shapeVector;		// 用到了多态,需要指针

设计原则

依赖倒置

高层模块(稳定)不依赖底层模块(变化); 二者都应该依赖于抽象

抽象(稳定)不依赖于实现细节(变化); 实现细节应该依赖于抽象

MainForm ---- -> Line
MainForm ----- -> Rectangleline 和 Rectangle是变化的,可能后面需要各种形状;而MainForm主窗口是稳定的;
稳定的 不应该依赖于  变化的; 这种设计是不行的
MainForm -> Shape (抽象)
Line -> Shape (抽象)
Rectangle -> Shape (抽象)现在调整为MainForm依赖于稳定的Shape; Shape是稳定的;
line rectangle等变化的形状依赖于稳定的shape;这样设计是ok的

key:如果出现稳定的 依赖于 变化的; 需要将稳定的抽象出一个类;让变化的 ->依赖于抽象的;

开放封闭原则OCP

对扩展开放,对更改封闭

类模块应该是可扩展的,但是不可修改

单一职责原则SRP

一个类应该仅有一个引起变化的原则

变化的方向隐含着类的责任

里氏替换原则

子类必须能够替换它们的基类 is - A

继承表达类型抽象

接口隔离原则ISP

不应该强迫客户程序依赖它们不用的方法

接口应该小而完备

优先使用对象组合,而不是类继承

组合:在一个类中定义另外一个类

继承在某种程度上破坏了封装性,子类父类耦合度高

对象组合则要求被组合的对象具有良好定义的接口,耦合性低

封装变化点

使用封装来创建对象之间的分解层,让设计者可以在分界一侧进行修改,不会对另外一侧产生不良影响

一侧变化; 一侧稳定

针对接口编程,而不是针对实现编程

不将变量类型声明为某个特定的具体类,而是声明为某个接口

客户程序无需获知对象的具体类型,只需要知道对象的接口

减少系统中各部分的依赖关系,从而实现“高内聚,低耦合”

接口标准化


http://www.ppmy.cn/ops/129413.html

相关文章

2024年网络安全(黑客)自学总结

前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 如何成为一名黑客 很多朋友在学习安全方面都会半路转行&#xff0c…

docker 安装 PostgreSQL

参考链接 https://hub.docker.com/_/postgres 安装 # 后台运行&#xff0c;镜像名称为 postgres # --name postgres 容器名称为 postgres # POSTGRES_PASSWORD 超级用户的密码&#xff0c;超级用户名默认为&#xff1a;postgres&#xff0c;可以使用 POSTGRES_USER 环境变量设…

解决nanobind库中C++与Python的多参数绑定不兼容

最近在实验室写一个开源项目的扩展&#xff0c;用到了nanobind库来绑定多参数的C模板&#xff0c;遇到了匪夷所思的问题 问题描述 #1 0x00007ffff73b881c in _Py_XINCREF (op0x7ffff74187830100)at /usr/include/python3.8/object.h:532 #2 0x00007ffff73ba94e in nanobind:…

【测试平台】Odin-ws 工程环境部署

背景&#xff1a; 这个是我4年半以前接受测试平台过程中遇到问题记录&#xff0c;因为交接成都这边&#xff0c;拿出来直接用了。这里做个记录。 一、美东测试服务器相关 1.主服务器部署机器 该机器是美东服务器。 机器配置&#xff1a;t5.xlarge cpu 4核&#xff0c; 内存…

用Python在Excel工作表中添加、修改及删除超链接

在创建Excel工作簿时&#xff0c;内部文档的互链、报告自动化生成或是创建外部资源快速访问路径是比较常见的需求。通过超链接&#xff0c;我们可以将工作表与外部资源、文件或网页无缝连接&#xff0c;提升数据的交互性和可读性。无论是为了快速导航、动态更新内容&#xff0c…

全国各省、市、县(区)PM2.5浓度面板数据1980至2022年-最新出炉_附下载链接

1980-2022年全国各省、市、县&#xff08;区&#xff09;PM2.5浓度面板数据 下载链接-点它&#x1f449;&#x1f449;&#x1f449;&#xff1a;1980-2022年全国各省、市、县&#xff08;区&#xff09;PM2.5浓度面板数据-最新出炉.zip 资源介绍 一、数据来源 该数据集由NA…

JavaEE初阶------网络编程续+传输层UDP协议介绍

文章目录 1.实现翻译服务器2.TCP的socket api使用3.初识网络编程3.1开发中常见的格式3.1.1行文本方式构造3.1.2xml格式表示3.1.3json处理格式3.1.4protobuffer格式 3.2传输层3.2.1UDP报文格式3.2.2校验和的说明3.2.3校验和的计算方法3.2.3.1CRC算法3.2.3.2MD5算法 1.实现翻译服…

<大厂实战场景> ~ flutter鸿蒙next处理后端返回来的数据的转义问题

✅近期推荐&#xff1a;求职神器 https://bbs.csdn.net/topics/619384540 &#x1f525;欢迎大家订阅系列专栏&#xff1a;flutter_鸿蒙next &#x1f4ac;淼学派语录&#xff1a;只有不断的否认自己和肯定自己&#xff0c;才能走出弯曲不平的泥泞路&#xff0c;因为平坦的大路…