设计模式期末复习

一、设计模式的概念以及分类

二、设计模式的主题和意图

 设计模式的主题是关于软件设计中反复出现的问题以及相应的解决方案。这些主题是基于长期实践经验的总结,旨在提供一套可复用的设计思路和框架,以应对软件开发中的复杂性和变化性。

三、面向对象程序设计原则,记住名字,还要理解它的使用场景以及如何用?

提高可维护、可复用、可扩展、灵活性 。

面向对象程序设计原则是一组指导性的规则,旨在帮助开发人员创建更加模块化、灵活和易于维护的代码。这些原则主要包括:

一、单一职责原则(Single Responsibility Principle, SRP)

  • 定义:一个类应该只有一个引起它变化的原因,即一个类只负责一个功能或一个职责
  • 目的降低类的复杂度,提高类的可读性和可维护性。如果一个类有多个职责,当其中一个职责发生变化时,可能会影响到其他职责,从而增加系统的复杂性和出错率。
  • 应用:在设计类时,要确保每个类都只有一个明确的职责,并尽量避免将多个职责耦合在一起。

二、开放封闭原则(Open/Closed Principle, OCP)

  • 定义:软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。
  • 目的:在不修改现有代码的情况下,通过扩展来实现新的功能。这有助于保持系统的稳定性和可维护性。
  • 应用:在设计时,要考虑到未来可能的扩展需求,并为之预留接口或抽象类。当需要添加新功能时,可以通过继承或实现这些接口或抽象类来实现,而不是直接修改原有的代码。

三、里氏替换原则(Liskov Substitution Principle, LSP)

子类可以扩展父类的功能,但不能改变父类原有的功能。换句话说,子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。

四、接口隔离原则(Interface Segregation Principle, ISP)

  • 定义:客户端不应该被迫依赖于它们不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。
  • 目的:减少类之间的耦合度,提高系统的灵活性和可维护性。通过为客户端提供尽可能小的接口,可以减少它们对不必要方法的依赖,从而降低系统的复杂性。
  • 应用:在设计接口时,要尽量细化接口,将不同的功能拆分成不同的接口。这样,客户端只需要依赖它们需要的接口,而不需要依赖整个庞大的接口集合。

五、依赖倒置原则(Dependence Inversion Principle, DIP)

  • 定义:高层模块不应该依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。
  • 目的:减少系统各部分的依赖关系,提高系统的稳定性和可维护性。通过依赖抽象而不是具体实现,可以降低系统之间的耦合度,从而更容易地进行单元测试和代码重构。
  • 应用:在设计时,要尽量使用接口或抽象类来定义高层模块和低层模块之间的依赖关系。这样,当低层模块的实现发生变化时,只需要修改低层模块的代码,而不需要修改高层模块的代码。

六、组合/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)

  • 定义:尽量使用合成/聚合的方式来实现复用,而不是使用继承。
  • 目的:通过组合/聚合关系来实现类的复用,可以降低类之间的耦合度,提高系统的灵活性和可扩展性。
  • 应用:在设计类时,要尽量使用合成/聚合关系来关联其他类,而不是通过继承来复用代码。这样可以避免因为继承而导致的代码冗余和复杂性增加。

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

  • 定义:在编程时,要尽量针对接口进行编程,而不是针对具体的实现进行编程。
  • 目的:通过针对接口编程,可以降低系统之间的耦合度,提高系统的灵活性和可扩展性。同时,这也有助于实现多态性和代码的重用性。
  • 应用:在编写代码时,要尽量使用接口或抽象类来定义变量和方法的返回类型。这样,当具体的实现发生变化时,只需要修改实现类的代码,而不需要修改调用这些接口或抽象类的代码。

综上所述,面向对象程序设计原则是一组重要的指导规则,它们有助于开发人员创建更加模块化、灵活和易于维护的代码。在实际开发中,应该根据具体的需求和场景来灵活运用这些原则,以创建出高质量的软件系统。

四、松耦合、紧耦合、强关联、弱关联、静态复用、动态复用的概念,还有静态委派,动态委派

(是一样的东西,要从不同角度去理解)博客里写死,叫紧耦合强关联静态复用,写代码这两个模块的关系不确定,根据程序运行时才动态的关联起来,这叫松耦合弱关联,动态复用

五、模式中工厂方法模式、抽象工厂模式(说过一道必考题)

六、结构模式中的代理模式,动机、意图、实现方式、应用场景分别

七、行为模式中观察者模式和策略者模式

第三章

八.选择、判断各个模式都会涉及

单例模式中什么叫按需加载、懒加载

校园模式的池记

装置器模式动态复用,动态功能的附加

4.设计模式中的类模式和对象模式,哪些是类模式,哪些是对象模式

5.23钟模式里边类模式只有四种,工厂方法模式、实例模式、类示例器模式、模板方法模式(不准确)

九、类图

 

依赖关系:

class Computer {
public:static void start(){cout<<"电脑正在启动"<<endl;} 
};class Student {
public://返回值构成依赖Computer& program();//形参构成依赖void program(Computer&);void playGame() {//局部变量构成依赖Computer* computer=new Computer;...//静态方法调用构成依赖Computer::star();}
};

 关联关系:类 Student 将成为类 Classes 的成员变量

class Teacher;
class Student {
public:Teacher teacher;  //成员变量void study();
}	

聚合关系:类 Student 将成为类 Classes 的成员变量

public class People{Car car;House house; //聚合关系中作为成员变量的类一般使用set方法赋值public void setCar(Car car){This.car = car;}public void setHouse(House house){This.house = house;}public void driver(){System.out.println(“车的型号:”+car.getType());}public void sleep(){System.out.println(“我在房子里睡觉:”+house.getAddress());}
}

组合关系:类 Heart 将成为类 Student 的成员变量

Public class People{Soul soul;Body body; //组合关系中的成员变量一般会在构造方法中赋值Public People(Soul soul, Body body){ This.soul = soul;This.body = body;}Public void study(){System.out.println(“学习要用灵魂”+soul.getName());}Public void eat(){System.out.println(“吃饭用身体:”+body.getName());}
}

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

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

相关文章

Windows脚本清理C盘缓存

方法一&#xff1a;使用power文件.ps1的文件 脚本功能 清理临时文件夹&#xff1a; 当前用户的临时文件夹&#xff08;%Temp%&#xff09;。系统临时文件夹&#xff08;C:\Windows\Temp&#xff09;。 清理 Windows 更新缓存&#xff1a; 删除 Windows 更新下载缓存&#xff0…

随手记:小程序兼容后台的wangEditor富文本配置链接

场景&#xff1a; 在后台配置wangEditor富文本&#xff0c;可以文字配置链接&#xff0c;图片配置链接&#xff0c;产生的json格式为&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

OpenHarmony-6.IPC/RPC组件

IPC/RPC组件机制 1.基本概念 IPC&#xff1a;设备内的进程间通信&#xff08;Inter-Process Communication&#xff09;。 RPC&#xff1a;设备间的进程间通信&#xff08;Remote Procedure Call&#xff09;。 IPC/RPC用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱…

米思齐图形化编程之ESP32开发指导

在当今充满创意与探索的科技领域&#xff0c;米思齐图形化编程为广大爱好者开启了一扇通往智能硬件控制的便捷之门&#xff0c;尤其是当它与强大的 ESP32相结合时&#xff0c;更是碰撞出无限可能的火花。ESP32作为一款高性能、多功能的微控制器&#xff0c;拥有丰富的外设接口与…

tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录

目录 tslib的简介tslib的源码和make及make install后得到的文件下载tslib的主要功能tslib的工作原理tslib的核心组成部分tslib的框架和核心函数分析tslib的框架tslib的核心函数ts_setup()的分析(对如何获取设备名和数据处理流程的分析)函数ts_setup()自身的主要代码ts_setup()对…

使用 AI 辅助开发一个开源 IP 信息查询工具:一

本文将分享如何借助当下流行的 AI 工具,一步步完成一个开源项目的开发。 写在前面 在写代码时&#xff0c;总是会遇到一些有趣的机缘巧合。前几天&#xff0c;我在翻看自己之前的开源项目时&#xff0c;又看到了 DDNS 相关的讨论。虽然在 2021 年我写过两篇相对详细的教程&am…

Oracle:数据库的顶尖认证

在信息技术的飞速发展中&#xff0c;Oracle Corporation&#xff08;甲骨文公司&#xff09;以其在数据库领域的卓越成就而闻名遐迩。自1977年成立以来&#xff0c;Oracle已经从一个小型软件公司成长为全球最大的企业级软件公司之一&#xff0c;其产品和技术广泛应用于金融、电…

「配置应用的可见性」功能使用教程

引言 对于「应用可见性」这一概念&#xff0c;可能很多开发者小伙伴还不是很熟悉。简单举一个很典型的场景例子&#xff0c;当你开发的应用需要调起第三方应用时&#xff0c;这里就涉及到应用可见性的问题了&#xff0c;如果不配置相关的应用可见性&#xff0c;则你的应用是无…

flask flask-socketio创建一个网页聊天应用

应用所需环境&#xff1a; python 3.11.11 其他 只需要通过这个命令即可 pip install flask3.1.0 Flask-SocketIO5.4.1 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 最好是用conda创建一个新的虚拟环境来验证 完整的pip list如下 Package Version ----…

[计算机网络]唐僧的”通关文牒“NAT地址转换

1.NAT&#xff1a;唐僧的通关文牒 在古老的西游记中&#xff0c;唐僧师徒四人历经九九八十一难&#xff0c;终于取得了真经。然而&#xff0c;他们并不是一开始就获得了通关文牒&#xff0c;而是经过了重重考验&#xff0c;最终得到了国王的认可&#xff0c;才顺利通过了各个关…

数据结构经典算法总复习(下卷)

第五章:树和二叉树 先序遍历二叉树的非递归算法。 void PreOrderTraverse(BiTree T, void (*Visit)(TElemType)) {//表示用于查找的函数的指针Stack S; BiTree p T;InitStack(S);//S模拟工作栈while (p || !StackEmpty(S)) {//S为空且下一个结点为空&#xff0c;意味着结束遍…

【Windows版】opencv 和opencv_contrib配置

一、参考资料 &#xff08;四十一&#xff09;CMakeVSopencv/opencv_contrib 环境配置 从源码安装&#xff2f;penCV&#xff0c;使用python windowsvscodeopencv源码安装配置 二、关键步骤 1. opencv与opencv_contrib版本对齐 下载 opencv 下载 opencv_contrib opencv…

2014年IMO第4题

△ A B C \triangle ABC △ABC 中, B C BC BC 上有一点 P P P 满足 ∠ B A P = ∠ A C B \angle BAP=\angle ACB ∠BAP=∠ACB, 还有一点 Q Q Q 满足 ∠ A = Q A C = ∠ A B C \angle A=QAC=\angle ABC ∠A=QAC=∠ABC. 分别延长 A P AP AP, A Q AQ AQ 一倍至 M M M, N …

基于微信小程序的乡村旅游系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

拆解一个微型气泵了解工作原理

原因 在焊接电路板时&#xff0c;测试打印后想要拆卸错误的板子上的元件&#xff0c;但每次拆卸过程中吸锡器手动按压到手疼。忽然看见一种小型气泵&#xff0c;不知道能不能做一个电动的吸锡器。 拆卸过程 第一步先把前盖板拆掉&#xff0c;这一步很好办到&#xff0c;就三…

SAP HCM 考勤时间冲突到分 源码分析

导读 时间冲突:SAP实施顾问应该都知道时间约束的概念&#xff0c;时间约束是按照主键作为分隔&#xff0c;其中信息类型有个seqnr的流水号字段&#xff0c;是控制时间约束的主要条件&#xff0c;今天分析的2001信息类型&#xff0c;如果日期相同&#xff0c;请假的开始时间与结…

《庐山派从入门到...》板载按键启动!

《庐山派从入门到...》板载按键启动&#xff01; 《庐山派从入门到...》板载按键启动&#xff01; 视频内容大致如下 我们之前了解了GPIO的输出模式使用方法&#xff0c;并且成功点灯&#xff0c;很明显本篇要来分享的自然是GPIO的输入模式 正好回顾一下之前学的python基础包…

分布式协同 - 分布式事务_TCC解决方案

文章目录 导图Pre流程图2PC VS 3PC VS TCC2PC&#xff08;Two-Phase Commit&#xff0c;二阶段提交&#xff09;3PC&#xff08;Three-Phase Commit&#xff0c;三阶段提交&#xff09;TCC&#xff08;Try-Confirm-Cancel&#xff09;2PC、3PC与TCC的区别2PC、3PC与TCC的联系 导…

新版国标GB28181设备端Android版EasyGBD支持国标GB28181-2022,支持语音对讲,支持位置上报,开源在Github

经过近3个月的迭代开发&#xff0c;新版本的国标GB28181设备端EasyGBD安卓Android版终于在昨天发布到Github了&#xff0c;最新的EasyGBD支持了国标GB28181-2022版&#xff0c;还支持了语音对讲、位置上报、本地录像等功能&#xff0c;比原有GB28181-2016版的EasyGBD更加高效、…

YOLO-World:Real-Time Open-Vocabulary Object Detection

目录 摘要 Abstract YOLO-World 1 模型架构 1.1 Text Encoder 1.2 YOLO Backbone 2 RepVL-PAN 2.1 T-CSPLayer 2.2 I-Pooling Attention 2.3 预测 3 消融实验 3.1 预训练数据 3.2 RepVL-PAN的消融实验 3.3 文本编码器 4 效果展示 4.1 零样本 4.2 根据词汇表检…