【设计模式】目的、分类、UML类图

1. 设计模式的目的

  1. 代码复用性(功能相同的代码,不用多次编写)
  2. 可读性(编程规范,便于其他程序员阅读和理解)
  3. 可扩展性(当需要增加新的功能时,非常方便)
  4. 可靠性(新增功能后,对原来的功能没有影响)
  5. 使得程序呈现高内聚、低耦合的特性

2. 设计模式分类

分类目的
创建型模式用于描述怎么创建对象,主要特点是将对象的创建育使用分开。单例,工厂方法,抽象工厂,原型,建造者5种创建型模式
结构型模式用于描述如何将类或者对象按某种布局组成更大的结构代理,适配器,桥接,装饰,外观,享元,组合7种结构型模式
行为型模式用于描述类或者对象之间怎样相互协作共同完成单个对象无法完成的任务,以及如何分配职责策略,命令,责任链,状态,观察者,中介者,迭代器,访问者,备忘录,解释器11种行为模式

3. UML类图

3.1 概念

用来表示类、接口以及它们之间的静态结构和关联关系。

3.2 前置知识(类的表示方式)

在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包name,age和address这3个属性,以及work()方法。
在这里插入图片描述
属性/方法名称前加的加号和减号表示了这个属性/方法的可见性,UML类图中表示可见性的符号有三种:
+:表示public
-:表示private
#:表示protected

属性的完整表示方式是: 可见性 名称 :类型 [ = 缺省值]
方法的完整表示方式是: 可见性 名称(参数列表) [ : 返回类型]

举个例子

在这里插入图片描述
上图Demo类定义了三个方法:
method()方法:修饰符为public,没有参数,没有返回值。
method1()方法:修饰符为private,没有参数,返回值类型为String。
method2()方法:修饰符为protected,接收两个参数,第一个参数类型为int,第二个参数类型为String,返回值类型是int。

3.2 常见的类图

3.2.1 泛化关系(继承关系)

【泛化关系】是一种继承关系,表示子类继承父类的所有特征和行为。
【箭头指向】带三角箭头的实线,箭头指向父类。
例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下图所示:
在这里插入图片描述

3.2.2 实现关系

【实现关系】是一种类与接口的关系,表示类是接口所有特征和行为的实现。
【箭头指向】带三角箭头的虚线,箭头指向接口。
例如,汽车和船实现了交通工具,其类图如图 9 所示。
在这里插入图片描述

3.2.3 组合关系

【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。
【代码体现】成员变量
【箭头指向】带实心菱形和普通箭头的实线,实心菱形指向整体。
例如,头和嘴的关系,没有了头,嘴也就不存在了。在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。下图所示是头和嘴的关系图:
在这里插入图片描述

3.2.4 聚合关系

【聚合关系】是一种整体与部分的关系。且部分可以离开整体而单独存在。聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】成员变量
【箭头指向】带空心菱形的实线,空心菱形指向整体。
例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。下图所示是大学和教师的关系图:
在这里插入图片描述

3.2.5 关联关系

【关联关系】对象之间的一种引用关系,它使得一个类知道另一个类的属性和方法。
【代码体现】成员变量
【分类】单向关联,双向关联

3.2.5.1 单向关联

在这里插入图片描述
在UML类图中单向关联用一个带箭头的实线表示。上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。

3.2.5.2 双向关联

在这里插入图片描述
双向关联就是双方各自持有对方类型的成员变量。
在UML类图中,双向关联用一个不带箭头的直线(或者双向箭头)表示。上图中在Customer类中维护一个List,表示一个顾客可以购买多个商品;在Product类中维护一个Customer类型的成员变量表示这个产品被哪个顾客所购买。

3.2.5.3 自关联

在这里插入图片描述
自关联在UML类图中用一个带有箭头且指向自身的线表示。上图的意思就是Node类包含类型为Node的成员变量,也就是“自己包含自己”。

3.2.6 依赖关系

【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助。它是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责
【箭头指向】带普通箭头的虚线,普通箭头指向被使用者。
例如,下图所示是司机和汽车的关系图,司机驾驶汽车:
在这里插入图片描述

总结

对于继承、实现这两种关系没多少疑问,它们体现的是一种类和类、或者类与接口间的纵向关系。其他的四种关系体现的是类和类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准确定位是很难的。前面也提到,这四种关系都是语义级别的,所以从代码层面并不能完全区分各种关系,但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖。

来源:https://www.bilibili.com/video/BV1Np4y1z7BU?p=21&spm_id_from=pageDriver&vd_source=b901ef0e9ed712b24882863596eab0ca
类图关系参考:https://aikysay.blog.csdn.net/article/details/125069834

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值