设计模式类型及原则

news/2024/4/27 6:07:41/文章来源:https://blog.csdn.net/qq_45780653/article/details/130317136

设计模式是一种被广泛应用于面向对象编程的设计思想,可以帮助解决软件开发中的一些通用问题。在这个过程中,设计模式的设计原则是指,遵循一些通用的设计准则,以确保我们能够创建出良好的设计,使我们的代码能够具有良好的可维护性、可读性、可扩展性和可重用性。

设计模式类型

创建型、结构型和行为型。

创建型

创建型模式是一类关注于对象的创建过程的设计模式。
它们关心对象的创建和实例化的方式,用于封装对象(或类)的创建过程,而不是关注它们的具体实现。使用创建型模式可以提高代码的重用性,降低系统的耦合度,同时也可以让代码更加灵活、易于扩展。
主要处理对象的创建,帮助我们在系统中创建对象。

创建型模式包括以下几种类型:
单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。

结构型

结构型模式是一种关注对象之间静态组合的设计模式。
通常将多个类或者对象组合在一起以形成更大的、更复杂的结构,从而实现特定的功能。使用结构型模式可以让系统更加灵活、易于扩展,同时也可以降低系统的耦合度和复杂度。
通常用于解决类或者对象的组合问题。

结构型模式包括以下几种类型:
适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式和代理模式。

行为型

行为型模式是一种关注类和对象之间动态交互的设计模式。
行为型模式关注的是对象之间的相互作用(通信、控制等),以及如何使得这些对象之间更加高效地协同工作。使用行为型模式可以使得系统更加清晰、可读性更高,并且降低了系统的耦合度。
通常用于解决类或对象间的通信和控制问题。

行为型模式包括以下几种类型:
模板方法模式、策略模式、命令模式、责任链模式、状态模式、观察者模式、中介者模式、迭代器模式和访问者模式。

设计模式原则

  1. 单一责任原则(Single Responsibility Principle,SRP):一个类只负责一项职责,类的职责应该单一,这样可以使类更加简洁、清晰,并且容易扩展,有助于提高类的可复用性、可读性和可维护性。如果有多个职责,应该考虑将其分解为多个类。

  2. 开闭原则(Open Closed Principle,OCP): 一个软件实体(类、模块、函数等)应当对扩展开放,对修改关闭,避免在修改原有代码时引入新的错误和风险。这个原则主要是用来指导类和模块的设计,通过抽象出稳定的接口和实现,来保证系统的可扩展性。这意味着应该通过添加新功能来扩展一个系统,而不是通过修改现有代码来实现。

  3. 里氏替换原则(Liskov Substitution Principle,LSP):子类可替换父类并保持程序的正确性和稳定性。这个原则是继承关系中最重要的原则之一,它指导我们如何设计父类和子类的关系,让父类的所有特性也适用于子类。这意味着在使用继承时应该注意子类的行为是否与其父类一致。

  4. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖底层模块,它们应该都依赖于抽象。依赖于抽象而不是具体实现,这意味着应该依赖于抽象类或接口而不是具体实现,使系统更加灵活,容易维护和修改。这个原则主要是用于指导类和模块的依赖关系设计,通过抽象出稳定的接口和实现,来保证系统的松耦合性。

  5. 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小接口上。这个原则是用于指导类和接口的设计,通过拆分大而全的接口为小而专的接口,来避免不必要的依赖关系。

  6. 迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有最小的了解。这个原则主要是用于指导类之间的依赖关系,一个类尽量少的与其他类发生联系,即减少对象之间的耦合,可以提高模块的可重用性和可维护性,使系统更加灵活、易于扩展和维护。

  7. 合成/聚合复用原则(CARP):通过组合多个类的方式来复用代码,而不是继承关系来复用代码,避免继承的缺陷和风险,使系统更加灵活、复用性更高。

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

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

相关文章

Java版本企业电子招投标采购系统源代码——功能模块功能描述+数字化采购管理 采购招投标

​ 功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外…

塔望食研院丨百年益生菌,千亿市场正蓝海!

2022年12月塔望咨询开设塔望食品大健康消费研究院(简称塔望食研院)栏目,塔望食研院以“为食品行业品牌高质量发展赋能”为理念,将不定期发布食品大健康行业研究、消费研究报告。塔望食研院致力于结合外部数据、消费调研数据、企业…

Mybatis学习基础篇(一)——使用Maven快速搭建一个mybatis项目,并实现简单的增删改查

题外话: 在了解mybatis框架之前,我先说明一句,目前主流的框架技术层出不穷,每个人都有自己喜欢的技术框架,自己喜欢用就行。技术并没有高低之分,喜欢用就用,虽然目前大部分人都喜欢向新技术看齐…

C++、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数(侯捷)

C、STL标准模板库和泛型编程 ——迭代器、 算法、仿函数 (侯捷) 迭代器iterator_category 算法accumulatefor_eachreplacecountfindsortbinary_search 仿函数 functors(六大部件中最简单的一种!) 使用一个东西,却不明白它的道理&a…

4月21日第壹简报,星期五,农历三月初二

4月21日第壹简报,星期五,农历三月初二坚持阅读,静待花开1. 推特拒向大模型免费开放数据!马斯克威胁起诉微软;Reddit宣布不再向大模型免费开放数据,要求科技巨头付费使用API接口。2. 浙江:鼓励杭…

2023.04.24 c++第六讲

作业&#xff1a; 1. 手动实现顺序栈&#xff0c;要求实现数据结构中&#xff0c;所有栈的相关操作 #include <iostream> #define MAXSIZE 20 //宏定义&#xff0c;栈的最大容量 using namespace std;template <typename T> class stacklink { pri…

FBEC大会 | 瑞云科技 CTO 赵志杰:元宇宙时代的基础设施——实时云渲染

​ FBEC未来商业生态链接大会于2023年2月24日在深圳福田大中华喜来登酒店盛大召开&#xff0c;本次大会由广东省游戏产业协会、深圳市互联网文化市场协会指导&#xff0c;陀螺科技主办。 大会以“勇毅前行逐光而上”为主题&#xff0c;以具有行业前瞻洞察的“探索者”为视角&a…

Three.js+TypeScript+Webpack学习记录(二)

使用环境参考 Node.js v16.19.1 正文 跟着文档画个线 看看 Three 的官方文档&#xff0c;起步 -> 画线 -> 没了&#xff1f;&#xff01;&#xff01; 不管怎么说&#xff0c;先画个线吧。 import * as THREE from threeconst scene new THREE.Scene() const camer…

PyTorch深度学习实战 | 基于深度学习的电影票房预测研究

基于深度学习的映前票房预测模型(Cross&Dense网络结构模型)&#xff0c;该模型通过影片基本信息如&#xff1a;电影类型、影片制式、档期和电影的主创阵容和IP特征等信息对上映影片的票房进行预测。 本篇采用451部电影作为训练模型&#xff0c;最后再在194部影片上进行测试…

【计网 从头自己构建协议】一、libpcap 介绍 手撕以太网帧

上一篇&#xff1a;IndexError: list index out of range 下一篇&#xff1a;[【计网 从头自己构建协议】二、收发 ARP 请求帧与响应帧] 介绍 理论的学习总是枯燥的&#xff0c;想要加深对理论的理解&#xff0c;最好的方法就是自己实践一遍。 想要亲手实现各种协议&#xf…

【音视频第17天】RTSP、RTMP协议初识

被叫去搞直播了&#xff0c;悲喜交加。先学习一下基本的技术栈&#xff0c;RTSP RTMP HTTP 先简单随便看看吧。 目录 什么是流媒体协议RTMPRTMP 工作原理 RTSPRTSP 工作原理 RTMP 与 RTSP 区别详细看看RTSP简介RTSP交互流程OPTIONSDESCRIBESETUPPLAYPAUSESET_PARAMETERGET_PAR…

春招,进阿里了....

个人背景是东北某 985 科班本硕&#xff0c;做的 测试开发&#xff0c;有两个自己写的小项目。下面是一些印象比较深刻的面试题 阿里一面 什么是软件测试&#xff1f; 软件测试过程中会面向哪些群体&#xff1f; 开发一个软件都要经过哪些阶段&#xff1f; 什么是黑盒测试&…

八年软件测试生涯,是时候做出改变了

五年前&#xff0c;我在南方的大城市&#xff1a;广州&#xff0c;做着一个快乐的游戏测试&#xff0c;工作不太忙&#xff0c;对一切技术充满了好奇心。测试工作不专业&#xff0c;也不受重视。但我有自己的快乐。工作不忙的时候&#xff0c;我今天学学Python&#xff0c;明天…

什么是客户服务平台?

在社交媒体和智能手机出现之前&#xff0c;品牌主要通过单向广告渠道与客户互动。社交媒体打破了这种自上而下的动态&#xff0c;以前所未有的方式打开了对话&#xff0c;将客户包括在内。 品牌不再控制客户对人们分享公司内容的行为。人们可以点击离开&#xff0c;向左滑动&a…

Python-pyppeteer解决微软Microsoft的登录机器人验证(8)

前言 本文是该专栏的第8篇,结合优质项目案例,让你精通使用Pyppeteer,后面会持续分享Pyppeteer的干货知识,记得关注。 在注册微软Microsoft账号或者注册outlook邮箱账号的时候,会遇到如下机器人验证: 是的,你可能第一眼看到这个验证页面,首先会想到是定位它的页面元素N…

非常详细的阻抗测试基础知识

编者注&#xff1a;为什么要测量阻抗呢&#xff1f;阻抗能代表什么&#xff1f;阻抗测量的注意事项... ...很多人可能会带着一系列的问题来阅读本文。不管是数字电路工程师还是射频工程师&#xff0c;都在关注各类器件的阻抗&#xff0c;本文非常值得一读。全文13000多字&#…

Vue CLI 服务

使用命令 在一个 Vue CLI 项目中&#xff0c;vue/cli-service 安装了一个名为 vue-cli-service 的命令。你可以在 npm scripts 中以 vue-cli-service、或者从终端中以 ./node_modules/.bin/vue-cli-service 访问这个命令。 这是你使用默认 preset 的项目的 package.json&…

电脑突然变成绿屏错误代码无法使用怎么办?

电脑突然变成绿屏错误代码无法使用怎么办&#xff1f;有用户使用电脑的时候&#xff0c;电脑桌面变成了绿屏的显示&#xff0c;所有的操作无法继续进行。遇到这个问题要怎么去进行解决呢&#xff1f;来看看详细的解决方法教学吧。 准备工作&#xff1a; 1、U盘一个&#xff08;…

(原创)Flutter基础入门:手把手教你搭建Flutter混合项目

前言 Flutter是Google开源的构建用户界面&#xff08;UI&#xff09;工具包 支持在不同平台构建一致的ui效果 但在实际业务中&#xff0c;一般不会整个APP都用纯Flutter开发 尤其一些老的项目&#xff0c;会采用接入Flutter的方式来混合开发 那么今天就主要讲一下如何搭建一个…