设计模式(上)

发布于:2022-12-21 ⋅ 阅读:(217) ⋅ 点赞:(0)

A.模式

模式:在一定环境中解决一些问题的方案(通俗点就是: 特定环境用固定的套路解决问题)

B.设计模式

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

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

什么变化:

  1. 客户需求的变化

  2. 技术平台变化

  3. 开发团队的变化

  4. 市场环境的变化

    ....

B.设计模式分类(共23种)

  • 创建型模式

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

    • 工厂模式

    • 抽象工厂模式

    • 建造者模式

    • 原型模式

    • 单例模式

  • 结构型模式

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

    • 代理模式

    • 装饰者模式

    • 适配器模式

    • 桥接模式

    • 组合模式

    • 外观模式

    • 享元模式

  • 行为型模式

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

    • 模板方法模式

    • 命令模式

    • 责任链模式

    • 策略模式

    • 中介者模式

    • 观察者模式

    • 备忘录模式

    • 访问者模式

    • 状态模式

    • 解释器模式

    • 迭代器模式

D.面向对象的设计原则

①依赖倒置原则(DIP)

DIP:Dependence Inversion Principle

  • 高层(稳定)不依赖低层(变化),两者依赖抽象(稳定)。

  • 抽象(稳定)不依赖细节(变化),细节依赖抽象(稳定)。

理解:水果店不会因为不卖橘子就不是水果店;水果店和橘子,香蕉等都因为水果而联系起来;若梨子被定义成水果,则可以在水果店里卖

②开放封闭原则(OCP)

OCP:Open For Extension, Closed For Modification Principle

  • 对扩展开放,对更改封闭

  • 类模块可扩展, 但不可修改

③单一职责原则(SRP)

SRP:Single Responsibility Principle

  • 一个类应该仅有一个引起它变化的原因

  • 变化的方向隐含类的责任

④里氏替换原则(LSP)

LSP:Liskov Substitution Principle

  • 子类必须能够替换它们的基类(减少使用派生类形式)

  • 继承表达类型抽象

⑤接口隔离原则(ISP)

  • 不应该强迫客户程序依赖他们不用的方法

  • 接口应该小而完备

  • 一个接口应该只提供一种对外功能

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

CARP:Composite/Aggregate Reuse Principle

  • 类的继承通常是"白箱复用",对象组合通常是"黑箱复用"

  • 继承在一定程序破坏封装性,子类和父类耦合度高

⑦迪米特法则(LOD)

LOD:Law of Demeter

  • 对象应当对其他对象尽可能少的了解

  • 各个模块之间相互调用时,通常会提供一个统一的接口来实现

E.C++类图

什么是类图

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

类图作用

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

类图的元素

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

类图中类的组成

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

+: 公有属性
-: 私有属性
#: 保护属性
name:string  成员名:类型
eat():void   成员函数:返回值类型
斜体:抽象类或者纯虚函数

类中图类的关系

  • 依赖(Dependency)关系

    依赖关系是指两个或多个类之间的依存关系,如植物类依赖于土壤类。 依赖关系还可以再细分为5种类型,分别是绑定(Binding)依赖、实现(Realization)依赖、使用(Usage)依赖、抽象(Abstraction)依赖和授权(Permission)依赖。

    (依赖关系用虚线箭头来表示,箭头指向为依赖的方向)

  • 泛化(Generalization)关系

    简单的讲就是类之间的继承关系。

    (用空心三角形+实线来表示,箭头指向为父类)

  • 关联(Association)关系

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

    关联关系用实线箭头来表示

  • 聚合(Aggregation)关系

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

    空心的菱形+实线箭头来表示,箭头指向为被聚合的类

  • 组合(Composition)关系

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

    (组合关系用实心的菱形+实线箭头来表示,箭头指向为被组合的类)

  • 实现(Realization)关系

    一般来讲实现关系是针对类与接口之间的关系而言的。

    (实现关系用空心三角形+虚线来表示)

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到