• 欢迎访问 winrains 的个人网站!
  • 本网站主要从互联网整理和收集了与Java、网络安全、Linux等技术相关的文章,供学习和研究使用。如有侵权,请留言告知,谢谢!

图解设计模式(0):关于UML

设计模式 winrains 1年前 (2019-09-19) 45次浏览

1 类图

类图(Class Diagram)用于表示类、接口、实例等之间相互的静态关系。

1.1 类与层次结构


类图中,空心箭头由子类指向父亲(箭头指向的类为父类,表示根源)。上图中,ParentClass为父类,ChildClass为子类。
类图中的长方形表示类,长方形内部被横线自上而下分为了如下三个区域:
1)类名
2)字段名
3)方法名

  • 抽象类的名字以斜体方式显示
  • 静态字段的名字带有下划线
  • 抽象方法的名字以任何方式显示
  • 静态方法的名字带有下划线

采用如下方法记住箭头方向的指向:
在定义子类时需要通过extends关键字指定父类。因此,子类一定知道父类的定义,而反过来,父类并不知道子类的定义。只有在知道对方的信息时才能指向对方,因此箭头方向是从子类指向父类。

1.2 接口与实现


上图表示PrintClass类实现了Printable接口。
类图中以斜体方式显示接口的名字(本书中是如此约定,在别的书中不一定以斜体显示)
空心箭头代表了接口与实现类的关系,箭头从实现类指向接口。
UML以<<interface>>表示Java的接口。

1.3 聚合


这种持有关系称为聚合(aggregation)。只要在一个类中持有另外一个类的实例—无论是一个还是多个—它们之间就是聚合关系。
在UML中,使用带有空心菱形的实线表示聚合关系,因此可以进行联想记忆,将聚合关系想象为在空心菱形的器皿中装有其他物品。

1.4 可见性(访问控制)


在UML中,可以通过在方法名和字段名前面加上记号来表示可见性。
“+”表示public方法和字段,可以从类外部访问这些方法和字段。
“-”表示private方法和字段,无法从类外部访问这些方法和字段。
“#”表示protected方法和字段,能够访问这些方法和字段的只能是该类自身、该类的子类以及同一包中的类。
“~”表示只有同一包中的类才能访问的方法和字段。

2 类的关联


可以在类名前面加上黑三角表示类之间关联关系,如上图所示。

3 时序图

时序图(sequence diagram)用来表示程序在工作时其内部方法的调用顺序,以及事件的发生顺序。
类图中表示的是“不因时间流逝而发生变化的关系(静态关系)”,时序图则与之相反,表示的是“随时间发生变化的东西(动态行为)”。

上图中共有3个实例,如最上方的3个长方形所示。在长方形内部写有类名,类名跟在冒号(:)之后,并带有下划线,代表各自类的实例。
如果需要,还可以在冒号(:)之前表示出实例名,如server:Server
每个实例都带有一条向下延伸的虚线,称之为生命线。可以理解为时间从上向下流逝,上面是过去,下面是未来。生命线仅存在于实例的生命周期内。
在生命线上,有一些细长的长方形,它们表示实例牌某种活动中。
横方向上有许多箭头,黑色实线箭头表示方法的调用,虚线表示方法调用返回。

摘自《图解设计模式》


版权声明:文末如注明作者和来源,则表示本文系转载,版权为原作者所有 | 本文如有侵权,请及时联系,承诺在收到消息后第一时间删除 | 如转载本文,请注明原文链接。
喜欢 (0)