Skip to content

Latest commit

 

History

History
126 lines (79 loc) · 6.6 KB

before-read.md

File metadata and controls

126 lines (79 loc) · 6.6 KB

名词解释及规范约定


术语解释

(1)耦合

耦合通常是指各个对象之间的依赖程度,一般来说,依赖程度越高就代表耦合性高。与耦合对应的,就是解耦。解耦是一个动词,意思是解除对象之间的依赖关系,目的就是让对象之间的耦合程度变低。

(2)抽象

当我们提到抽象时,你需要特别注意,因为我们讨论的内容可能已经脱离了某种具体的语言。一般来说,我们指的是对于某一类行为的约束声明。

比如我们发现猫和狗都有叫的行为,事实上所有的动物都可以发出叫声。此时我们定义出动物Animal类,并且声明了一个叫bark()的行为;猫和狗则分别实现Animal#bark()行为。这个过程中,Animal#bark()就是对各种动物叫唤的行为抽象,Animal也是动物的抽象。

另外一些时候,我们会提到抽象类。抽象类则专指 JAVA 中被abstract关键字修饰的类,并且出于规范,针对于文中出现的抽象类,我会尽量以 Abstract 作为类的前缀,比如AbstractCommand

(3)接口

和抽象一样,当我们说接口时,也需要根据语境分析用意。我们在文档中提到接口时,主要有两三层意义。

  • 物理接口:在适配器模式中,我们描述了数据线需要接入其他的实现了某个标准的设备,比如 type-c 接口;
  • 远程接口:指在系统内暴露给外部,以供客户端和系统进行数据交互的方法,例如我们常说的Controller等,在代理模式中描述远程代理时,我们就使用了这一层意思;
  • JAVA关键字:JAVA 中被interface关键字修饰的类。

(4)客户端

几乎在所有的模式中,我们都提到了客户端。应当注意,客户端指的是使用模式的任何地方,并不局限于某个具体的类。以单例模式来说,客户端指的是任何使用了Singleton对象的地方。

(5)委托

我们曾不止一次提到委托,委托描述了一种行为机制。一个对象把发送给自身的请求转发给另一个对象,这样的行为就是委托。比如现有对象a收到了来自其他对象发来的请求,出于一些原因a并不处理这个请求,而是直接将该请求转发给对象b,由b负责处理该请求,我们就说对象a将请求委托给了对象b

类图

对于类图,似乎我们很难参照一个完全统一的标准,对于同样的一份代码,在不同的书籍展示出的类图中也有细微的差别。我们不用去分辨谁对谁错,为了在后续的文档中不产生误解,我们将对类图中容易产生理解偏差的部分做一个约定。毕竟类图只是一个帮助我们理解的方式,而不应该成为我们学习道路上的桎梏。

类的定义

(1)接口

接口中有<>标识,并且接口中的方法应为斜体(仅有声明没有实现)。

上图表示一个组件的接口,该组件接口中定义了两个行为,分别为添加子组件addChildren(Component):void,绘制自己到屏幕上paint():void

(2)抽象类

抽象类名和抽象方法应为斜体,非抽象方法不使用斜体。并且抽象类应以Abstract为命名前缀,以示区分。

上图表示一个抽象的树形节点类,该抽象类中维护了一个子节点列表的属性,并提供了两个方法。addNode(AbstractTreeNode):void方法用于将另一个树形节点对象添加到子节点列表中,提供了统一的实现,子类可根据需要决定是否重写,countNodeSize():int方法用于统计该属性节点的数量,是抽象方法,由子类负责实现。

(3)类

无特别约定。

上图表示一个用户类,提供两个用户状态,分别为姓名name和年龄age,并为其分别提供状态获取方法。export(String):void表示打印当前用户信息。

类间关系

(1)继承

描述一个类与另一个之间的继承关系,使用实线连接两个类,指向被继承一端使用空心三角箭头。

上图描述了猫Cat继承自动物Animal

(2)实现

描述一个类与一个接口之间的实现关系,使用虚线连接类和接口,指向接口的一端使用空心三角箭头。

上图描述了猫Cat实现了叫唤接口Brak

(3)实例化

描述一个类实例化另一个类的对象,使用虚线连接两个类,被实例化的类一端使用普通箭头。

上图描述了UserService需要实例化User对象

(4)委托

描述一个类将发送到自身的请求转发给另一个类的实例上,使用实线连接两个类,被委托的一端使用普通箭头。

上图描述了对于图形对象Shape的获取面积请求将转发到圆形对象Circle上,Shape类维护一个指向Circle类实例的引用,并在合适的时机将请求转发给这个引用对应的对象上。可在箭头上标注出引用对象的名称“circle”,也可以省略它。

请注意,我们将使用没有箭头的虚线来标注注释,并且为了更方便识别,将使用不同的颜色以示区分。

(5)聚合

描述一个类与另一个类的实例对象之间整体与部分的关系,换句话说,一个对象是另一个对象的组成部分。使用实线连接这两个类,被包含的一端使用普通箭头(表示相识关系),包含的一端使用空心菱形箭头(表示聚合关系)。

上图描述了文件夹Folder内部维护了多个文件File对象

上图描述了汽车Car由引擎Engine、控制系统ControlSystem和油箱Tank等部分组成

参阅资料

《Design Patterns - Elements of Reusable Object-Oriented Software》——(Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides

附录

回到主页