设计模式期末复习

news2024/12/23 9:44:55

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

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

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

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

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

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

一、单一职责原则(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.coloradmin.cn/o/2264170.html

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

相关文章

【小白51单片机专用教程】protues仿真AT89C51入门

课程特点 无需开发板0基础教学软件硬件双修辅助入门 本课程面对纯小白&#xff0c;因此会对各个新出现的知识点在实例基础上进行详细讲解&#xff0c;有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容&#xff0c;所有涉及…

MFC用List Control 和Picture控件实现界面切换效果

添加List Control 和Picture控件 添加 3个子窗体 把子窗体边框设置为None, 样式设为Child 声明 CListCtrl m_listPageForm;void ShowForm(int nIndex);void CreatFormList();void CMFCApplication3Dlg::DoDataExchange(CDataExchange* pDX) {CDialogEx::DoDataExchange(pDX);DD…

Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器)

目录 1.压缩和解压缩 1.1压缩 1.2解压缩 2.vim编辑器 2.1vim的3种工作模式 2.2切换编辑模式 2.3保存和退出 2.4光标移动 1.压缩和解压缩 - Linux 操作系统&#xff0c;默认支持的 压缩格式&#xff1a;gzip、bzip2。 默认&#xff0c;这两种压缩格式&#xff0c;只能…

接口测试Day-02-安装postman项目推送Gitee仓库

postman安装 下载 Postman&#xff08;已提供安装包&#xff0c;此步可以跳过&#xff09; https://www.postman.com/downloads/安装 Postman 安装Postman插件newman 要想给 postman 安装 newman 插件&#xff0c;必须 先 安装 node.js。 这是前提&#xff01; 安装node.js 可能…

虚拟地址空间 -- 虚拟地址,虚拟内存管理

1. C/C语言的内存空间分布 用下列代码来观察各种区域的地址&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h>int g_unval; int g_val 100;int main(int argc, char *argv[], char *env[]) {const char *str "helloworld&qu…

【数字化】华为数字化转型架构蓝图-2

目录 1、客户联结的架构思路 1.1 ROADS体验设计 1.2 具体应用场景 1.3 统一的数据底座 1.4 案例与成效 2、一线作战平台的架构思路 2.1 核心要素 2.2 关键功能 2.3 实施路径 2.4 案例与成效 3、能力数字化的架构思路 3.1 能力数字化的核心目标 3.2 能力数字化的实…

【优选算法】—移动零(双指针算法)

云边有个稻草人-CSDN博客 想当一名牛的程序员怎么能少的了练习算法呢&#xff1f;&#xff01; 今天就立即开启一个新专栏&#xff0c;专干算法&#xff0c;提高算法能力&#xff08;废柴的我也在准备蓝桥杯哈哈&#xff09;—— 目录 1.【 283. 移动零 - 力扣&#xff08;Lee…

AI的进阶之路:从机器学习到深度学习的演变(三)

&#xff08;承接上集&#xff1a;AI的进阶之路&#xff1a;从机器学习到深度学习的演变&#xff08;二&#xff09;&#xff09; 四、深度学习&#xff08;DL&#xff09;&#xff1a;机器学习的革命性突破 深度学习&#xff08;DL&#xff09;作为机器学习的一个重要分支&am…

Python自动化测试:线上流量回放

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在自动化测试中&#xff0c;线上流量回放是一项关键技术&#xff0c;可以模拟真实用户的请求并重现线上场景&#xff0c;验证系统的性能和稳定性。本文将介绍Pytho…

初始C语言3

目录 9. 操作符 9.1 算术操作符 9.2 移位操作符 9.3 位操作符 9.4 赋值操作符 9.5 单目操作符 9.6 关系操作符 9.7 逻辑操作符 9.8 条件操作符 9.9 逗号表达式 下标引用、函数调用和结构成员 10. 常见关键字 10.1 typedef 10.2 static 10.2.1 修饰局部变量 10.…

【Rust自学】4.5. 切片(Slice)

4.5.0. 写在正文之前 这是第四章的最后一篇文章了&#xff0c;在这里也顺便对这章做一个总结&#xff1a; 所有权、借用和切片的概念确保 Rust 程序在编译时的内存安全。 Rust语言让程序员能够以与其他系统编程语言相同的方式控制内存使用情况&#xff0c;但是当数据所有者超…

VPN技术-GRE隧道的配置

GRE隧道的配置 1&#xff0c; 在AR1上配置DHCP接口地址池&#xff0c;AR3上配置DHCP全局地址池 2&#xff0c; PC1获取的IP地址为10.10.10.253&#xff0c;PC2获取的IP地址为10.10.30.253 3&#xff0c;通过ip route-static将目的地址为10.10.30.253的流量引入到Tunnel #配…

碰撞检测算法之闵可夫斯基差集法(Minkowski Difference)

在游戏开发和机器人路径规划乃至于现在比较火的自动驾驶中&#xff0c;我们常常需要确定两个物体是否发生碰撞&#xff0c;有一种通过闵可夫斯基差集法求是否相交的算法&#xff0c;下面将介绍一下 闵可夫斯基差集法的优势 闵可夫斯基差集法优势&#xff1a; 可以处理复杂的…

Python OCR 文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

【系统】Windows11更新解决办法,一键暂停

最近的windows更新整的我是措不及防&#xff0c;干啥都要关注一下更新的问题&#xff0c;有的时候还关不掉&#xff0c;我的强迫症就来了&#xff0c;非得关了你不可&#xff01; 经过了九九八十一难的研究之后&#xff0c;终于找到了一个算是比较靠谱的暂停更新的方法&#x…

复合翼与倾转旋翼飞行器:设计与控制算法对比

一、引言 复合翼&#xff08;Compound Wing&#xff09;和倾转旋翼&#xff08;Tilt - Rotor&#xff09;飞行器在现代航空领域均占据独特地位&#xff0c;二者在设计和控制算法方面展现出显著差异。这些差异在飞行模式切换、推进系统设计、控制算法复杂度以及飞行器稳定性等多…

空闲中断配合DMA

1.传统串口接收数据&#xff1a;来一个字节接受一个。 2.一次中断将一包数据存到缓冲区 3.DMA原理

三格电子——新品IE103转ModbusTCP网关

型号&#xff1a;SG-TCP-IEC103 产品概述 IE103转ModbusTCP网关型号SG-TCP-IEC103&#xff0c;是三格电子推出的工业级网关&#xff08;以下简称网关&#xff09;&#xff0c;主要用于IEC103数据采集、DLT645-1997/2007数据采集&#xff0c;IEC103支持遥测和遥信&#xff0c;可…

HDLBits训练3

时间&#xff1a;2024.12.22 Hadd 代码 法一&#xff1a; module top_module( input a, b,output cout, sum );assign {cout,sum}ab; endmodule法二&#xff1a; 运行结果 Fadd 代码 法一&#xff1a; module top_module( input a, b, cin,output cout, sum );assign…

Qt之串口设计-线程实现(十二)

Qt开发 系列文章 - Serial-port&#xff08;十二&#xff09; 目录 前言 一、SerialPort 二、实现方式 1.创建类 2.相关功能函数 3.用户使用 4.效果演示 5.拓展应用-实时刷新 总结 前言 Qt作为一个跨平台的应用程序开发框架&#xff0c;在串口编程方面提供了方便易用…