diff --git a/notes/设计模式.md b/notes/设计模式.md index cb865b9b..1d4c2a26 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -266,7 +266,7 @@ public class ConcreteFactory2 extends Factory { ## 类图 -

+

抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂模式只是用于创建一个对象,这和抽象工厂模式有很大不同。 diff --git a/notes/面向对象思想.md b/notes/面向对象思想.md index e7022981..6ff533b3 100644 --- a/notes/面向对象思想.md +++ b/notes/面向对象思想.md @@ -6,9 +6,13 @@ * [封装](#封装) * [继承](#继承) * [多态](#多态) -* [三、UML](#三uml) - * [类图](#类图) - * [时序图](#时序图) +* [三、类图](#三类图) + * [泛化关系 (Generalization)](#泛化关系-generalization) + * [实现关系 (Realization)](#实现关系-realization) + * [聚合关系 (Aggregation)](#聚合关系-aggregation) + * [组合关系 (Composition)](#组合关系-composition) + * [关联关系 (Association)](#关联关系-association) + * [依赖关系 (Dependency)](#依赖关系-dependency) * [参考资料](#参考资料) @@ -196,147 +200,47 @@ public class Music { } ``` -# 三、UML +# 三、类图 -## 类图 +## 泛化关系 (Generalization) -### 1. 继承相关 +用来描述继承关系,在 Java 中使用 extends 关键字。 -继承有两种形式 : 泛化(Generalize)和实现(Realize),表现为 IS-A 关系。 +

-#### 泛化关系 (Generalize) +## 实现关系 (Realization) -从具体类中继承。 +用来实现一个接口,在 Java 中使用 implement 关键字。 -

+

-#### 实现关系 (Realize) +## 聚合关系 (Aggregation) -从抽象类或者接口中继承。 +表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。 -

+

-### 2. 整体和部分 - -#### 聚合关系 (Aggregation) - -表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。以下表示 B 由 A 组成: - -

- -#### 组合关系 (Composition) +## 组合关系 (Composition) 和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。比如公司和部门,公司没了部门就不存在了。但是公司和员工就属于聚合关系了,因为公司没了员工还在。 -

+

-### 3. 相互联系 - -#### 关联关系 (Association) +## 关联关系 (Association) 表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。因此也可以用 1 对 1、多对 1、多对多这种关联关系来表示。比如学生和学校就是一种关联关系,一个学校可以有很多学生,但是一个学生只属于一个学校,因此这是一种多对一的关系,在运行开始之前就可以确定。 -

+

-#### 依赖关系 (Dependency) +## 依赖关系 (Dependency) -和关联关系不同的是,依赖关系是在运行过程中起作用的。依赖通常作为类的构造器或者方法的参数传入。双向依赖是一种不好的设计。 +和关联关系不同的是,依赖关系是在运行过程中起作用的。A 类和 B 类是依赖关系主要有三种形式: -

+1. A 类是 B 类中的(某中方法的)局部变量; +2. A 类是 B 类方法当中的一个参数; +3. A 类向 B 类发送消息,从而影响 B 类发生变化; -## 时序图 - -### 1. 定义 - -时序图描述了对象之间传递消息的时间顺序,它用来表示用例的行为顺序。它的主要作用是通过对象间的交互来描述用例(注意是对象),从而寻找类的操作。 - -### 2. 赤壁之战时序图 - -从虚线从上往下表示时间的推进。 - -

- -可见,通过时序图可以知道每个类具有以下操作: - -```java -publc class 刘备 { - public void 应战 (); -} - -publc class 孔明 { - public void 拟定策略 (); - public void 联合孙权 (); - private void 借东风火攻 (); -} - -public class 关羽 { - public void 防守荊州 (); -} - -public class 张飞 { - public void 防守荆州前线 (); -} - -public class 孙权 { - public void 领兵相助 (); -} -``` - -### 3. 活动图、时序图之间的关系 - -活动图示从用户的角度来描述用例; - -时序图是从计算机的角度(对象间的交互)描述用例。 - -### 4. 类图与时序图的关系 - -类图描述系统的静态结构,时序图描述系统的动态行为。 - -### 5. 时序图的组成 - -#### 对象 - -有三种表现形式 - -

- -在画图时,应该遵循以下原则: - -1. 把交互频繁的对象尽可能地靠拢。 - -2. 把初始化整个交互活动的对象(有时是一个参与者)放置在最左边。 - -#### 生命线 - -生命线从对象的创建开始到对象销毁时终止 - -

- -#### 消息 - -对象之间的交互式通过发送消息来实现的。 - -消息有 4 种类型: - -1\. 简单消息,不区分同步异步。 - -

- -2\. 同步消息,发送消息之后需要暂停活动来等待回应。 - -

- -3\. 异步消息,发送消息之后不需要等待。 - -

- -4\. 返回消息,可选。 - -#### 激活 - -生命线上的方框表示激活状态,其它时间处于休眠状态。 - -

+

# 参考资料 diff --git a/pics/0acc722a-de55-4539-82ab-446238c8a242.png b/pics/0acc722a-de55-4539-82ab-446238c8a242.png new file mode 100644 index 00000000..26cedd10 Binary files /dev/null and b/pics/0acc722a-de55-4539-82ab-446238c8a242.png differ diff --git a/pics/0e34263d-7287-4ffe-a716-37c53d1a2526.png b/pics/0e34263d-7287-4ffe-a716-37c53d1a2526.png new file mode 100644 index 00000000..c5f0bbe3 Binary files /dev/null and b/pics/0e34263d-7287-4ffe-a716-37c53d1a2526.png differ diff --git a/pics/2017511e-22f0-4d74-873d-1261b71cf5a4.png b/pics/2017511e-22f0-4d74-873d-1261b71cf5a4.png new file mode 100644 index 00000000..81633b51 Binary files /dev/null and b/pics/2017511e-22f0-4d74-873d-1261b71cf5a4.png differ diff --git a/pics/27cd6f0c-f581-45da-b8c9-fed026830560.png b/pics/27cd6f0c-f581-45da-b8c9-fed026830560.png new file mode 100644 index 00000000..40775ac8 Binary files /dev/null and b/pics/27cd6f0c-f581-45da-b8c9-fed026830560.png differ diff --git a/pics/aa42f9c6-ad7a-48f4-8e8b-f3b6de3feaec.png b/pics/aa42f9c6-ad7a-48f4-8e8b-f3b6de3feaec.png new file mode 100644 index 00000000..cdb78c11 Binary files /dev/null and b/pics/aa42f9c6-ad7a-48f4-8e8b-f3b6de3feaec.png differ diff --git a/pics/b418ca51-f005-4510-b7ad-f092eb6aeb24.png b/pics/b418ca51-f005-4510-b7ad-f092eb6aeb24.png new file mode 100644 index 00000000..07157513 Binary files /dev/null and b/pics/b418ca51-f005-4510-b7ad-f092eb6aeb24.png differ diff --git a/pics/c7d4956c-9988-4a10-a704-28fdae7f3d28.png b/pics/c7d4956c-9988-4a10-a704-28fdae7f3d28.png new file mode 100644 index 00000000..56510359 Binary files /dev/null and b/pics/c7d4956c-9988-4a10-a704-28fdae7f3d28.png differ