前置知识储备

基本认知

什么是模式

在一定环境中解决一些问题的方案(通俗来说:特定环境中用固定的套路解决问题)

什么是设计模式

设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结

设计模式最终的目的是为了应对变化,提高代码的复用性

  1. 客户需求的变化

  2. 技术平台的变化

  3. 开发团队的变化

  4. 市场需求的变化

    ...

设计模式分类

创建型模式

通常和对象创建有关,涉及到对象实例化的方式(5种)

  • 工厂模式
  • 抽象工厂模式
  • 建造者模式
  • 原型模式
  • 单例模式

结构型模式

描述的是如何组合类和对象获得更大的结构(7种)

  • 代理模式
  • 装饰者模式
  • 适配器模式
  • 桥接模式
  • 组合模式
  • 外观模式
  • 享元模式

行为型模式

描述类和对象的交互以及分配职责(11种)

  • 模板方法模式
  • 命令模式
  • 责任链模式
  • 策略模式
  • 中介者模式
  • 观察者模式
  • 备忘录模式
  • 访问者模式
  • 状态模式
  • 解释器模式
  • 迭代器模式

面向对象的设计原则

依赖倒置原则 (DIP)

DIP:Dependence Inversion Principle

  • 高层(稳定)不依赖底层(变化),两者依赖抽象(稳定)
  • 抽象(稳定)不依赖细节(变化),细节依赖抽象(稳定)

开放封闭原则 (OCP)

OCP:Open For Extension, Closed For Modification Principle

  • 对扩展开放,对更改封闭
  • 类模块可扩展,但不可修改

单一职责原则 (SRP)

SRP:Single Responsibility Principle

  • 一个类应该仅有一个引起它变化的原因
  • 变化的方向隐含类的责任

里氏替换原则 (LSP)

LSP:Liskov Subsitution Principle

  • 子类必须能够替换它们的基类(尽量少多态)
  • 继承表达类型抽象

接口隔离原则 (ISP)

ISP:Interface Segregation Principle

  • 不应该强迫客户程序依赖他们不用的方法(如果某个功能或方法不是必需的,那么依赖于它只会增加不必要的复杂性和耦合度;同时,只需要暴露必要的接口和方法,隐藏不必要的内部细节)
  • 接口应该小而完备(一个设计良好的接口应该只包含客户程序所需的方法)
  • 一个接口应该只提供一种对外功能

优先组合不是继承原则 (CARP)

CARP:Composite/Aggregate Reuse Principle

  • 类的继承通常是"白箱复用",对象组合通常是"黑箱复用"
  • 继承在一定程度上破坏封装性,子类和父类耦合度高(尽量少继承)

迪米特法则 (LOD)

LOD:Law of Demeter

  • 对象应当对其他对象尽可能少的了解(宁可通过 A ⇔ B ⇔ C,也不要直接 A ⇔ C)
  • 各个模块之间相互调用时,通常会提供一个统一的接口来实现

类图

基本认识

  • 类图显示了模型的静态结构,特别是模型中存在的类、类内部结构以及它们与其他类的关系
  • 类图不显示暂时性的信息
  • 类图是面向对象建模的主要组成部分
  • 它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换为编程代码

类图作用

描述类本身结构以及类与类之间一些关系

类图的元素

在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)、依赖关系(Dependecy)、泛化关系(Generalization)、关联关系(Association)、聚合关系(Aggregation)、组合关系(Composition)和实现关系(Realization)

类图中元素的组成

C++ 中一个类的类图组成如下:

+: 公有属性
-: 私有属性
#: 保护属性

name: string	成员名: 类型
eat(): void		成员函数: 返回值类型

斜体: 抽象类或者纯虚函数

类中类图的关系

  • 依赖关系(Dependency)
cpp 复制代码
依赖关系是指:两个或多个类之间依存关系,如植物类依赖于土壤类。

依赖关系还可以再细分为5种类型,分别是

- 绑定依赖(Binding)
- 实现依赖(Realization)
- 使用依赖(Usage)
- 抽象依赖(Abstraction)
- 授权依赖(Permission)
    
依赖关系用虚线箭头来表示,箭头指向为依赖的方向
  • 泛化关系(Generalization)
cpp 复制代码
简单的讲就是类之间的继承关系

用空心三角形和实线来表示,箭头指向为父类
  • 关联关系(Association)

    关联关系是类之间一种相互影响的关系,影响的方向就是关联的方向

    用实线箭头表示

  • 聚合关系(Aggregation)

    聚合关系是类之间的一种较弱的耦合关系,如一个字符串数组和一个字符串就是一种聚合关系

    用空心的菱形和实线箭头来表示,箭头方向为被聚合的类

  • 组合关系(Composition)

    组合关系是类之间一种整体与部分之间的关系,如一只青蛙有四条腿,青蛙类与青蛙腿类之间的关系就是组合关系

    实心的菱形和实线箭头来表示,箭头指向为被组合的类

  • 实现关系(Realization)

cpp 复制代码
一般来讲,实现关系是针对类与接口之间的关系而言的

空心三角形和虚线表示
相关推荐
找了一圈尾巴5 小时前
设计模式-组合模式、模板模式
设计模式·组合模式
float_六七7 小时前
Java——单例类设计模式
java·单例模式·设计模式
老菜鸟的每一天7 小时前
创建型模式-Prototype 模式(原型模式)
设计模式·原型模式
码熔burning8 小时前
(五)趣学设计模式 之 建造者模式!
java·设计模式·建造者模式
黑不溜秋的16 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
付聪121018 小时前
策略模式介绍和代码示例
设计模式
ThereIsNoCode19 小时前
「软件设计模式」状态模式(State)
设计模式·状态模式
菜鸟一枚在这1 天前
深入理解设计模式之代理模式
java·设计模式·代理模式
mjr1 天前
设计模式-Java
java·设计模式
yuanpan1 天前
23种设计模式之《组合模式(Composite)》在c#中的应用及理解
开发语言·设计模式·c#·组合模式