【C++】设计模式简介

设计模式

  • 设计模式是啥
  • 设计模式有啥好处
  • 设计模式的分类
    • 1.创建型模式
    • 2.结构型模式
    • 3.行为型模式
  • 设计模式的六大原则
    • 1.单一原则
    • 2.里氏替换原则
    • 3.依赖导致原则
    • 4.接口隔离原则
    • 5.迪米特原则
    • 6.开闭原则

设计模式是啥

设计模式是软件设计的推荐方案,描述如何组织代码来解决常见的设计问题,它是高层次的设计方案,与具体的实现细节无关。也是代码设计经验的总结。

设计模式有啥好处

可以提高代码的可重用性,可读性,可维护性和可靠性,提高效率

设计模式的分类

分为三个大类:创建型模式、结构型模式、行为型模式;

1.创建型模式

提供实例化方法,在特点条件下提供合适的对象创建方法: 将对象的创建和使用分开,因为对象的创建会消耗资源,所以需要单独研究对象如何高效的问题

包括:单例模式、工厂方法模式、抽象工厂模式、创建者模式、原型模式

2.结构型模式

处理实体间的关系,使得实体间能够更好的协同工作:对象的创建问题解决之后,对象的组成和对象之间的依赖关系又成为了新的问题,合理的对象结构、继承和依赖依赖关系会影响程序的可维护性、代码的健壮性,耦合性

包括:代理模式、适配器模式、桥接模式、组合模式等

3.行为型模式

当对象的创建,对象的结构和对象之间的依赖关系问题解决之后,剩下的就是对象的行为问题,对象的行为设计的好,对象的行为就更加清晰协作效率就会提高:

包括:访问者模式、观察者模式、备忘录模式、迭代器模式、解释器模式、状态模式、策略模式、命令模式等

设计模式的六大原则

1.单一原则

一个类只负责一项职责,尽量做到类只有一个行为原因引起变化;

2.里氏替换原则

子类可以扩展父类的功能,但不能改变原有父类的功能;

3.依赖导致原则

依赖于抽象而不依赖于具体。

4.接口隔离原则

使用多个隔离的接口, 降低类之间的耦合度。

5.迪米特原则

一个实体应当尽量少的与其他实体之间发生相互作用

6.开闭原则

用抽象构建架构,用实现扩展,也就是说对扩展开放,对修改关闭。

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

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

相关文章

springboot~自定义favicon加载问题

影响自定义favicon加载的原因 1、浏览器缓存问题2、由于favicon图标是在一个session会话中,所以需要关闭重开浏览器3、favicon源文件格式问题 1、浏览器缓存问题 清空浏览器缓存,或者是在network请求中停用缓存 2、由于favicon图标是在一个session会话中…

30天入门Python(基础篇)——第1天:为什么选择Python

文章目录 专栏导读作者有话说为什么学习Python原因1(总体得说)原因2(就业说) Python的由来(来自百度百科)Python的版本 专栏导读 🔥🔥本文已收录于《30天学习Python从入门到精通》 🉑🉑本专栏专门针对于零基础和需要重新复习巩固…

C语言共用体详解

文章目录 共用体解释代码说明小端存储 Little Endian共用体与小端存储为什么只能用第一个成员类型的值初始化一个共用体变量 共用体解释 共用体(Union)是一种特殊的数据类型, 它允许在同一个内存位置存储不同的数据类型。 共用体的所有成员共…

【C++入门】C语言的不足之处

概要 C入门主要讲的是C语言的一些不足,C作为补充,来补充C的不足之处 C的关键字有63个,C语言有32个(作为了解,不需要专门记) 变量的命名规则: 变量名必须以字母或下划线开头。变量名只能包含字…

怎么关闭php错误提示?两者方法分享

PHP程序员在开发过程中经常会遇到各种错误。为了方便查错,PHP默认会输出错误提示。但在生产环境中,这些错误提示信息不仅可能暴露你的代码结构,还会影响网站的性能和安全性。因此,关闭 PHP 的错误提示信息是一个很有必要并且很简单…

数据结构与算法-----顺序表(链表篇)

目录 前言 顺序表 链表 概念 与数组的不同 单链表 1. 创建节点 2.插入节点 尾插节点(形成链表结构) 向指定位置插入节点(链表已有) ​编辑 3.遍历链表数据 4.获取链表长度 5.删除节点 删除尾节点 删除指定节点 …

MyBatis的逆向工程

文章目录 前言MyBatis的逆向工程创建逆向工程的步骤添加依赖和插件创建MyBatis的核心配置文件创建逆向工程的配置文件执行MBG插件的generate目标 QBC查询增改 总结 前言 MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表…

微信支付-Native支付(网页二维码扫码微信支付)简单示例

目录 概述 界面展示 & 前端代码(Vue) 后端实现(SpringBoot) Maven依赖 下单接口(主要功能代码) 支付成功回调接口 测试(后端线上环境) 概述 本篇博文主要演示和说明网页扫…

腾讯云新用户有哪些优惠政策和专属活动?

腾讯云作为中国领先的云计算服务提供商,一直在为用户提供优质、高效且具有竞争力的服务。对于新用户,腾讯云更是诚意满满,推出了一系列优惠政策和专属活动。本文将详细介绍腾讯云新用户的优惠政策和专属活动,帮助大家更好地了解如…

【算法专题突破】滑动窗口 - 长度最小的子数组(9)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 1. 题目解析 题目链接:209. 长度最小的子数组 - 力扣(Leetcode) 要注意的是,题目给的是正整数, 而题目要求并不难理解,就是找最短的…

Python批处理(一)提取txt中数据存入excel

Python批处理(一)提取txt中数据存入excel 问题描述 现从冠层分析软件中保存了叶面积指数分析的结果,然而软件保存格式为txt,且在不同的文件夹中,每个文件夹的txt文件数量不固定,但是txt文件格式固定。现需…

PPT 架构师三板斧

PPT 架构师三板斧 目录概述需求: 设计思路实现思路分析1.多节点上PPT 架构师三板斧2.几张框框组合有组织3.专业词汇4.切记点要点 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,ski…

Android扫码连接WIFI实现

0&#xff0c;目标 APP中实现扫WIFI分享码自动连接WIFI功能 1&#xff0c;前提条件 设备需要有个扫码器&#xff08;摄像头拍照识别也行&#xff09;&#xff0c;APP调用扫码器读取WIFI连接分享码。 2&#xff0c;增加权限 在AndroidManifest.xml中增加权限 <uses-permissi…

接入 NVIDIA A100、吞吐量提高 10 倍!Milvus GPU 版本使用指南

Milvus 2.3 正式支持 NVIDIA A100&#xff01; 作为为数不多的支持 GPU 的向量数据库产品&#xff0c;Milvus 2.3 在吞吐量和低延迟方面都带来了显著的变化&#xff0c;尤其是与此前的 CPU 版本相比&#xff0c;不仅吞吐量提高了 10 倍&#xff0c;还能将延迟控制在极低的水准。…

golang flag 包的使用指北

说起 golang 的 flag 个包&#xff0c;我们第一反应的是什么呢&#xff1f;至少我曾经第一次看到 flag 包的时候&#xff0c;第一反应是想起写 C 语言的时候咱们用于定义一个表示的&#xff0c;我们一般会命名为 flag 变量 实际上 golang 的 flag 包是用于处理命令行参数的工具…

pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1+cu118 源码编译笔记【2】验证cuda安装 成功

接上篇 pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1cu118 源码编译笔记_hkNaruto的博客-CSDN博客 由于采用/usr/local/bin/gcc编译&#xff0c;先设置LD_LIBRARY_PATH&#xff0c;再启动python3 export LD_LIBRARY_PATH/usr/local/lib64:/usr/local/lib:/usr/lib64:/usr/…

TrOCR – 基于 Transformer 的 OCR 入门指南

多年来,光学字符识别 (OCR) 出现了多项创新。它对零售、医疗保健、银行和许多其他行业的影响是巨大的。尽管有着悠久的历史和多种最先进的模型,研究人员仍在不断创新。与深度学习的许多其他领域一样,OCR 也看到了变压器神经网络的重要性和影响。如今,我们拥有像TrOCR(Tran…

图论-01-图的基本表示-邻接矩阵和邻接表-Java

文章目录 邻接矩阵邻接表邻接表的问题和改进总结 邻接矩阵 import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner;public class AdjMatrix {private int V;private int E;private int[][] adj;// 构造函数&#xff0c;从文…

App线上网络问题优化策略

在我们App开发过程中&#xff0c;网络是必不可少的&#xff0c;几乎很难想到有哪些app是不需要网络传输的&#xff0c;所以网络问题一般都是线下难以复现&#xff0c;一旦到了用户手里就会碰到很多疑难杂症&#xff0c;所以对于网络的监控是必不可少的&#xff0c;针对用户常见…

【Hive-SQL】Hive Select 选择语句排除一列或多列

查看除了sample_date以外的所有字段信息 set hive.support.quoted.identifiersnone; select (sample_date)?. from test.table where sample_date20230713;查看除了sample_date 和 msgtype以外的所有字段信息 set hive.support.quoted.identifiersnone; select (sample_dat…