首页 > 编程语言 >设计模式 C++

设计模式 C++

时间:2023-08-03 21:55:13浏览次数:42  
标签:对象 类图 模式 关联 C++ 单例 设计模式

参考博客:https://blog.csdn.net/weixin_45712636/article/details/124328504

参考视频:https://www.bilibili.com/video/BV1Np4y1z7BU?p=1&vd_source=fce372ba0aa0bf9ed76094e3192b7015

参考文档:https://bright-boy.gitee.io/technical-notes/#/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/index

1. 设计模式概述

1.1 设计模式产生背景

  设计模式最开始被用在建筑领域设计中,在1995年在《设计模式:可复用面向对象软件的基础》一书中正式提出23中设计模式。

1.2 软件设计模式概念

  设计模式是一套被反复使用、经过分类编目和代码设计经验的总结,描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。

1.3 设计模式的必要性

  正确使用设计模式具有以下优点:

  • 提高程序员的思维、编程和设计能力;
  • 程序设计标准化,编码工程化,提高开发效率。缩短开发周期;
  • 提高代码的可重用行、可读性、可靠性、灵活性和可维护性。

1.4  设计模式分类

  • 创建型模式

  用于描述“怎样创建对象”,特点是将对象的创建和使用分离。 单例、原型、工厂、抽象工厂、建造者模式 5种。

  • 结构型模式

  用于描述如何将类或者对象按某种布局组成更大的结构。代理、适配器、桥接、装饰、外观、享元、组合模式 7种。

  • 行为型模式

  用于描述类或者对象之间怎样互相协作完成单个对象无法单独完成的任务,以及怎样分配职责。模板、策略、命令、职责、状态、观察者、中介者、迭代器、访问者、备忘录、解释器共11种。

2. UML

  统一建模语言(Unified Modeling Language, UML),用来设计软件的可视化建模语言。

  UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构建图、部署图。

2.1 类图

  类图(Class diagram),显示模型的静态结构,特别是模型中存在的类、类的内部结构以及与其他类的关系等。

2.1.1 类的表示方法

  类图中,类包含类名、属性(field)和方法(method),且用带有分割线的矩形来表示。比如下图表示的一个Employee类,包含name、age、address 3个属性和1个work()方法。

  表示可见性的三种符号:

  • + : public
  • -  : private
  • # : protected

  属性的表示方式:可见性  名称 : 类型 【=缺省值】

  方法的表示方式:可见性  名称(参数列表):【:返回类型】

2.1.2 类与类之间关系的表示方式

略。参考文档吧

1. 关联

  关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、师傅和徒弟、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。我们先介绍一般关联。

  关联又可以分为单向关联,双向关联,自关联。

  • 单向关联

  在UML类图中单向关联用一个带箭头的实线表示。上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。

  • 双向关联
  • 自关联
2. 聚合
3. 组合
4. 依赖
5. 继承
6. 实现

3.  设计原则

3.1 开闭原则

3.2 里氏代换原则

3.3 依赖倒转原则

3.4 接口隔离原则

3.5 迪米特法则

3.6 合成复用法则

4. 创建者模式

4.1 单例模式 Singleton

  一个类只创建一个唯一的对象,即一次创建多次使用。

  实现单例模式的步骤:
  1、构造函数私有化
  2、增加静态私有的当前类的指针变量
  3、提供静态对外接口,可以让用户获得单例对象

  单例设计模式分类两种:

  • ​ 饿汉式:类加载就会导致该单实例对象被创建

  还没有使用该单例对象,该单例对象就已经被加载到内存了,在对象过多时会造成内存浪费

  • ​ 懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建

  解决了饿汉式内存浪费问题,但是线程不安全的,可以通过互斥量mutex.lock()和mutex.unlock()来解决

 

 

 

 

 

4.2 工厂模式

4.3 抽象工厂模式

4.4 原型模式

4.5 建造者模式

 

标签:对象,类图,模式,关联,C++,单例,设计模式
From: https://www.cnblogs.com/astonc/p/17604587.html

相关文章

  • C++职工管理系统项目实战
    职工管理系统1.管理系统需求职工管理系统可以用来管理公司内所有员工的信息,利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责普通员工职责:完成经理交给的任务经理职责:完成老板......
  • 【设计模式】享元模式Flyweight:通过共享对象减少内存加载消耗
    (目录)享元模式Flyweight:通过共享对象减少内存加载消耗享元模式的用意享元模式以共享的⽅法⾼效地⽀持⼤量的细粒度对象,享元对象能做到共享的关键是区分内蕴状态和外蕴状态。⼀个内蕴状态是存储在享元对象内部的,并且是不会随环境改变⽽有所不同的,因此⼀个享元可以具有内蕴状态......
  • 【设计模式】装饰器模式Decorator:在基础组件上扩展新功能
    (目录)装饰器模式看上去和适配器模式、桥接模式很相似,都是使用组合方式来扩展原有类的,但其实本质上却相差甚远呢。简单来说,适配器模式侧重于转换,而装饰模式侧重于动态扩展;桥接模式侧重于横向宽度的扩展,而装饰模式侧重于纵向深度的扩展。原理装饰模式的原始定义是:允许动态地向......
  • 125.C++中的size_t
    125.C++中的size_t1.size_t●size_t是一些C/C++标准在stddef.h中定义的,size_t类型表示C中任何对象所能达到的最大长度,它是无符号整数●它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。size_t在32位系统上定义为unsignedint,也就是32位无符号整型。在64......
  • C++ STL
    1.初始头文件c++标准库不包括.h,#include;c旧库需要包括.h,#include<stdio.h>;c新库在旧库前面加c,不需要包含.h,#include。旧头文件不被封装在std命名空间中。网站资源www.cplusplus.comcppreference.comgcc.gnu.org书籍2.STL体系结构部件六大部件:容器、分配器、......
  • C++ | extern "C" 的用法
    extern"C"是C++中的一种用法(无法在C语言中使用),其作用是修饰一段代码,将其用C语言的方式进行编译。那么,使用C语言方式进行编译与使用C++方式进行编译又有什么区别呢?在C++中,支持函数重载:voidfunc();voidfunc(inta,intb);voidfunc(doublea,floatb);但在C语言中如果......
  • C++基础
    Talkischeap.Showmethecode.C++分为C++语言和C++标准库 版本演化可分为C++98(1.0),C++11(2.0),C++14话不多说,上代码头文件命名方式,例如complex.h首先要写防卫式声明,以前写的时候只是知道要写,现在知道才叫什么。1#ifndef_MYCOMPLEX_2#define_MYCOMPLEX_34......
  • Linux平台C++读写Word文档(DuckX库)
    1、安装cmake如果没有cmake或者cmake版本太旧,都需要进行重新安装此次推荐直接安装编译好的软件包进入官网:https://cmake.org/download/下载后直接在拷贝到系统里进行解压添加环境变量vim/etc/profile添加下面这条命令,路径换成自己安装的路径exportPATH=$PATH:/root......
  • c++
    1,2章输出printf(    输入scanf(一,变量通用形式<类型名><变量名>变量名=标识符(不能用数字开头,不能用关键字/保留字)前缀const【不变的】即锁定变量值(不允许改变)若变量要作为赋值则变量初始时要赋值(初始化) eg:inta; =》inta=0;二,浮点数类型名:int整点   do......
  • 遵守 MISRA 如何提高C++应用的安全性
    Perforce在支持需要稳定和安全的应用程序方面有着悠久的历史。凭借50多年的应用程序开发经验,从客户、趋势和竞争对手那里学到了很多东西。Perforce从软件开发的所有领域都采用了最佳实践,并试图将这些实践应用于Perforce所做的一切。Perforce采用了单元测试、自动化测试、敏捷开......