上学期开了一门叫做设计模式的课,正好自己对设计模式比较感兴趣就看了这本《大话设计模式》,借着这个机会跟着课堂把这本书看完了。受益还是蛮大的,很多模式其实自己在平常编码中都有用到。
类图中的关系
在正式开始学习前,需要先复习一下类图的相关知识。因为在设计模式中大量使用类图来表达一个设计模式的结构。
类图复习
首先我们看到了一个矩形框,他代表一个类。类图分为三层,第一层表示类的名称,如果是抽象类则用斜体表示。第二层是类的特性,通常包括字段和属性。第三层是类的操作,通常是方法或行为。”+“表示“public”,“-”表示“private,”#“表示”protected“。
接口
如图所示,为接口的一种表示方式,与类图的区别主要是顶部有<<interface>>
的显示。非常明显的,第一行是接口名称,第二行是接口方法。接口还可以用棒棒糖表示法来表示:
如图所示,唐老鸭类实现了“讲人话接口"。
类与类的关系——继承
首先自然是继承关系了,如图:
继承关系使用空心三角+实线来表示,其中箭头指向父类。
类与接口的关系——实现
如图所示,实现关系通过空心三角+虚线来表示,箭头指向被实现的接口。
类与类的关系——关联
关联关系,如图所示,通过实线箭头表示。关联关系表示两者之间具有使用关系,如图中的企鹅需要知道(引用)了这个类。
类与类的关系——聚合
聚合关系代表一种弱的“拥有关系“,即A对象可以包含B对象,但B对象不是A的一部分。图中的例子举的不太好,但用面向对象的方式理解的话是没有问题的,即雁群类中包含一个大雁List,但大雁类中并不包含雁群类。
类与类的关系——组合(合成)
组合关系代表一种强的“拥有关系”,体现了严格的部分和整体的关系,部分和整体的生命周期一致。组合关系用实心的菱形 + 实线箭头来表示。另外,我们在连线上标了两个数字,这被称为基数。表示这一端的类可以有几个实例。一只鸟有两只翅膀,所以这里就标着1和2了。另外,关联关系和聚合关系都可以标注基数。
类与类的关系——依赖
依赖关系,表示该类在另一个类的方法参数上,表明该类的运行需要此类,如动物的新陈代谢需要氧气和水,则动物依赖氧气和水。依赖关系用虚线箭头来表示。