最近正在准备软考,又一次的见到了设计模式,但是我们在复习的过程中发现有时对于UML类图之间的关系的强弱和对应代码的实现并不是特别的理解,所以现在整理整理,回顾一下之前的知识。
一、常见的几种的关系:
-
依赖
-
关联
-
聚合
-
组合
-
实现
-
泛化
各种关系的强弱顺序:
泛化=实现>组合>聚合>关联>依赖
二、依赖和关联
-
依赖
-
含义:一种使用的关系,描述一个对象(B)的修改会导致另一个对象(A)的修改,对象A知道对象B的存在,还会“使用”对象B的属性或方法。
- 代码表现:局部变量、方法的参数或者对静态方法的调用
-
UML类图:依赖关系用带箭头的虚线表示,有依赖的一方指向被依赖的一方
-
对应代码:
<span style="background-color: rgb(51, 51, 0);">public class Observer { public Observer(){ } ~Observer(){ } public virtual void Dispose(){ } public void Update(){ } }</span>
public class Sub<span style="font-family:SimSun;">j</span>ect { public Sub<span style="font-family:SimSun;">j</span>ect(){ } ~SubJect(){ } public virtual void Dispose(){ } public void Attach(){ } public void Detach(){ } }
-
关联
- 含义:一种拥有的关系,描述不同类的对象之间的结构关系,它使一个类知道另一个类的属性和方法。
- 代码表现:成员变量
-
UML类图:
- 对应代码:
public class Observer { <strong><span style="color:#3366FF;">public Subject m_Subject;</span></strong> public Observer(){ } ~Observer(){ } public virtual void Dispose(){ } public void Update(){ } }
public class Subject { public Subject(){ } ~Subject(){ } public virtual void Dispose(){ } public void Attach(){ } public void Detach(){ } }
-
对比
三、聚合和组合
-
聚合
- 含义:描述实体对象之间的关系,表达整体由部分构成
- 代码体现:成员变量
-
UML类图:
- 对应代码:
public class Invoker { <span style="color:#3333FF;">public Command m_Command;</span> public Invoker(){ } ~Invoker(){ } public virtual void Dispose(){ } public void Action(){ } }
public class Command { public Command(){ } ~Command(){ } public virtual void Dispose(){ } public void Excute(){ } }
-
组合
- 含义:描述实体对象之间的关系,表达整体拥有部分
- 代码表现:成员变量
-
UML类图:
-
对应代码:
public class Bird { private Wing m_Wing; public Bird(){ m_Wing = new Wing(); } ~Bird(){ } public virtual void Dispose(){ } }
public class Wing { public Wing(){ } ~Wing(){ } public virtual void Dispose(){ } }<span style="font-family:SimSun;font-size:18px;"> </span>
-
对比
四、实现和泛化
-
实现
- 含义:是一种类与接口的关系,表示类是接口所有特征和行为的实现
-
UML图:
-
泛化
-
含义:描述两个对象之间的继承关系,指定了子类如何特化父类的所有特征和行为
-
UML图:
-
对比
这设计模式中,对于这两种关系,主要体现在接口和抽象类 ,下一篇博客将对接口和抽象类进行整理。
五、总结
这次在含义、类图和类图对应的代码上进行了总结,在接下类的设计模式中,可以根据这种形式分析UML图和对应的代码的联系,将会更加有助于我们对于设计模式的理解。