A.模式
模式:在一定环境中解决一些问题的方案(通俗点就是: 特定环境用固定的套路解决问题)
B.设计模式
定义:设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结
设计模式最终的目的为了应对变化,提高代码的复用和重用性
什么变化:
客户需求的变化
技术平台变化
开发团队的变化
市场环境的变化
....
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)关系
一般来讲实现关系是针对类与接口之间的关系而言的。
(实现关系用空心三角形+虚线来表示)