设计模式概述

Posted by Hazuki on 2019-04-15

UML 构造块和符号

事务

事务主要包括:

  • 结构事务
  • 行为事务
  • 分组事务
  • 注释事务

结构事务

类符号

类符号包括名称、属性、方法和可选的附加组件四部分。

使用符号来表示访问权限

访问权限修饰词 符号
private -
protected #
public +
无修饰词 无符号
对象符号

表示对象的方式与类相同,唯一的区别是对象的名称下面有一条下划线。

接口符号

接口用圆形来表示,名称一般写在圆形下面。接口主要用来描述那些没有实际实现的功能(方法)

协作符号

使用虚线椭圆来表示,椭圆的中间写着它的名称。用于表示一组对象共同完成的某种用途

用例符号

使用包含名称的椭圆形来表示,能够代表多种不同的用途,一般用来表述系统的某种高级功能。

参与者符号

表示在内务或外部与系统进行交互的某些实体。在用例图中参与者一般用于描述内部或外部的实体。

初始状态符号

定义为一个过程的起点

最终状态符号

用来显示一个过程的终点

主动类符号

主动类通常用来描述系统的并发行为

组件符号

图形中间为组件符号的名称,必要时能够根据需要在符号上添加额外的元素。组件符号通常用来表示系统中由部分特定的 UML 图封装构成的系统组件。

节点符号

节点表示系统中的一个物理组件。

行为事务

UML具有表征软件和非软件 系统的动态部分的功能,这些功能特性包括交互符号和状态机符号。

交互符号

代表两个UNL组件之间的信息交换,由一组在元素间交换消息用于完成特定任务的行为构成。

基本序列图表示法:

  • 消息:消息是表示对象之间通信的箭头。通常消息表示为对象之间带箭头的线。
  • 对象生命线:对象下面的垂直虚线。只有创建完对象之后,才会有对象生命线。
  • 销毁对象:在需要结束对象生命周期的时候,使用标有 <<destory>> 的符号指向终点。

状态机符号

主要用于描述组件在其生命周期中的不同状态。

状态机展示了对象在其生命周期过程中对事件进行响应所产生的状态序列,以及对各种事件响应序列的集合。一个状态是对象在生命周期内满足某个条件、执行特定任务、等待外部事件响应等事件时的一种顺势状况。

事件是理解状态机产生的关键因素。对于一个状态机,一个事件是对象在不同状态之间转换的出发条件。

转换过程是对象在两种状态之间变化的关系。包括以下特征:

  • 状态源
  • 事件触发器
  • 活动
  • 目标状态

自我转换是源状态和目标状态相同的转换过程。这时活动主要是执行特定程序,或对基本状态(状态机条件核实)进行计算。活动也可能包括某种操作、创建或销毁其他对象,或发送信号给其他对象。

自状态是一个嵌套在另一个状态中的状态。包含子状态的状态称为复合状态。没有子状态的状态又叫简单状态。子状态可以在任何层级进行嵌套。

分组事物

包是唯一一个分组事物,用来将结构和行为事物进行分类。

注释事物

注释符号

关系

主要包括:依赖关系、泛化关系、关联关系和扩展关系四类。

依赖关系

定义了不同对象之间相互影响的关系。依赖关系描述的主要内容是当两个元素之中的一个发生变化,另一个会相应地发生变化。依赖关系使用带虚线的箭头表示,由依赖的元素指向独立的元素。

泛化关系

泛化关系描述了面向对象世界中的继承关系,即父类与子类的关系。使用一个空心箭头来表示,箭头指向的为父类,另一端为子类。

关联关系

描述了 UML 图中元素的关联方式,简单地说,它描述了多少个元素正在参与运算。

描述类之间关系最抽象的方式是使用关联关系连接。关联关系体现的是一个实例向另一个实例发送消息的能力,通常由一个指针或引用实例变量实现。关联关系在类之间通过一个指示关联方向的箭头表示。如果线段两端都是箭头,则表示双向的关联关系。两个端点表示相互关联的两个元素,同时能够在线上进行编号,来展示多个对象相互关联。

依赖关系和关联关系的区别

当我们将对某个类的引用作为当前类特定操作或函数的一部分时,通常会使用依赖关系。关联关系通常由一个指针或引用实例变量实现。

组合关系与聚合关系

组合关系表示类之间一种非常强烈的从属关系。使用黑色实心菱形来表示。例如,class A 是整体类,class B 是 A 的一部分,则使用黑色实心菱形从 B 指向 A。

聚合关系中,整体类要不部分类起到更重要的作用,使用空心菱形表示聚合关系。聚合关系描述类之间存在部分和整体的关系。

例如,一个人有心脏、肝脏等器官,对这种关系建模就是组合关系。一个人拥有一辆车、一栋房子、一台电脑,这就是聚合关系。

  • 聚合关系是一种若连接,对象能够彼此独立创建
  • 组合关系是一种强连接,部分对象在其他对象中创建
  • 在聚合关系中对象可以彼此独立存在。

设计模式简介

分类

创造性设计模式

注重与完成对象的实例化。相对于一般直接实例化对象,设计模式会根据实际情况有选择性地完成对象的实例化。这会为业务逻辑高度复杂化的情景提供足够的灵活性。

包括:

  • 抽象工厂设计模式
  • 生成器设计模式
  • 工厂方法设计模式
  • 原型设计模式
  • 单例设计模式

结构型模式

用于指导我们完成代码的结构划分,能够让代码更加清晰和易于理解,提高整体的可维护性。

包括:

  • 适配器设计模式
  • 桥接设计模式
  • 组合设计模式
  • 装饰设计模式
  • 门面设计模式
  • 享元设计模式
  • 代理设计模式

行为型模式

主要用于定义对象之间的通信和控制流程。

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

学习设计模式需要注意的问题

  • 模式的名称是什么
  • 模式的类型是什么
  • 模式的目的(作用)是什么
  • 该模式的别名
  • 什么情况下使用该模式
  • 能否例举该模式的基本示例
  • 该设计模式的 UML 图是什么样的?该模式的图形化展示是什么样的?具体是使用类图还是交互图?
  • 都有那些对象在模式中参与活动?最好能够列出在设计模式中使用的对象和类,并说明它们各自的角色。
  • 在模式中使用的类与对象之间是如何进行交互的?
  • 通过应用设计模式能够获得哪种效果?是否有其他副作用?如何权衡利弊以选择应用该模式?
  • 如何实现该模式?
  • 与该模式相关的模式是什么?如果还有其他模式和此模式相近,能否说明几种模式之间的异同?