关于 软件设计七大原则之前这篇文章已经讲过了,我最近重新打磨了一遍再次发了出来,但想要开始学习设计模式还有一些知识点要作补充,比如设计模式的分类呀、UML图呀、如何学习设计模式呀等等~
这篇文章不具体的讲解设计模式,主要起到一个类似于导论的作用
UML图
UML是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示,共分为用例图,类图,对象图,状态图,活动图,时序图,协作图,构件图,部署图等9种图。
在这里我们只介绍与设计模式有关的类图和顺序图
类图
- 属性用来描述类所具有的特征:
- 可见性属性名:类型名=初值
- 属性名和类型名是一定要有的,其他部分可选
- 对于可见性:+表示public,- 表示private,#表示protected,没有符号就表示是默认的可见性、
- 操作用来描述类能干些什么事情,也就是我们通常说的方法:
- 可见性操作名(参数列表):返回值类型
- 可见性和属性的描述方式一样,都是+表示public,-表示private,#表示protected,没有符号就表示是默认的可见性
- 参数列表由多个参数构成,用逗号分隔:
- 参数名:参数类型名
- 在类图中,如果属性或者方法是static的,那么在属性或者方法定义的下面,添加一条下划线表示是static的
- 关系符号:
顺序图/序列图/时序图
- 顺序图是按照时间的先后顺序来描述消息是如何在对象间发送和接收的
- 顺序图通常可以用来描述系统某次调用的运行顺序
- 消息的符号
类之间的关系
作用范围
- 继承、实现体现的是一种类和类、或者类与接口间的纵向关系。
- 其他的四种关系体现的是类和类、或者类与接口间的引用、横向关系,有很多事物间的关系要想准确定位是很难的。
- 强弱程度依次为:组合>聚合>关联>依赖。
- 处理类之间的关系通常用继承实现。
- 处理对象之间的关系,通过组合、聚合或者依赖实现
依赖
- 简单的理解,依赖就是一个类A使用到了另一个类B,而这种使用关系是偶然的、临时的、弱的,但是类B的变化会影响到类A。
- 比如人打电话需要手机,人就依赖手机。
- 表现在代码层面,为类B作为参数被类A在某个方法中使用。
- 在UML类图设计中,依赖关系用由类A指向类B的带箭头虚线表示。
- use-a
继承(extends)
- 继承指的是子类继承父类的所有功能,并可以再增加自己独有的特性。
- 继承的耦合度最大。
- 在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类。
- is-a
实现(implements)
- 实现指的是一个类实现接口(可以是多个)的功能,实现是类与接口之间最常见的关系。
- 一个类可以实现多个接口,实现所有接口的功能,体现了规范和实现分离的原则。
- 在UML类图设计中,实现用一条带空心三角箭头的虚线表示,从类指向实现的接口。
关联
- 关联体现的是两个类之间的强依赖关系,比如我和我的朋友,这种关系比依赖更强。可以是单向或者双向的。
- 表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。
- 在UML类图设计中,关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。
聚合
- 聚合是关联关系的特例,它体现的是整体与部分的关系。
- 此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、公司与员工的关系等,比如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。
- 表现在代码层面,和关联关系是一致的。
- 在UML类图设计中,聚合关系以空心菱形加实线箭头表示。
- has-a
组合
- 组合也是关联关系的一种特例,这种关系比聚合更强,称为强聚合。
- 它体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。
- 表现在代码层面,和关联关系是一致的。
- 在UML类图设计中,组合关系以实心菱形加实线箭头表示。
- contains-a
设计模式分类
范围\目的 | 创建型模式 | 结构型模式 | 行为型模式 |
---|---|---|---|
类模式 | 工厂 | (类)适配器 | 模板方法、解释器 |
对象模式 | 单例、原型、抽象工厂、建造者 | 代理、(对象)适配器、桥接、装饰、外观、享元、组合 | 策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录 |
按照目的分类
- 创建型模式:用来创建对象,将对象的创建与使用分离
- 结构型模式:将类或者对象按照某种布局组成更大的结构
- 行为型模式:描述类之间的相互协调以完成单个对象无法完成的任务
按作用范围分类
- 类模式:用于处理类之间的关系,通过继承实现
- 对象模式:用于处理对象之间的关系,通过组合、聚合或者依赖实现
到这里,设计模式的前置知识已经介绍完了,建议学习之前一定要了解好UML图,通过UML图和七大原则来好好学习设计模式
之后笔者会陆续介绍具体的设计模式,共勉:路漫漫其修远兮,吾将上下而求索