设计模式--UML类图


类和接口

类图

class Animal {
};

动物矩形框,它就代表一个类( Class)。
类图分三层:

  • 第一层显示类的名称,如果是抽象类,则就用斜体显示。
  • 第二层是类的特性,通常就是字段和属性。
  • 第三层是类的操作,通常是方法或行为。注意前面的符号,‘+’表示 public,‘-’表示 private,‘#’表示 protected



接口

interface IFly {
  void Fly();
};

interface ILanguage {
  void Speak();
};

然后注意左下角的‘飞翔’,它表示一个接口图,与类图的区别主要是顶端有<< interface>>显示。

  • 第一行是接口名称
  • 第二行是接口方法。
    接口还有另一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了‘讲人话’的接口。


设计模式中的六种关系

继承

class Bird : Animal {  // 继承动物类
  
};

继承关系用空心三角形+实线来表示



实现

class WideGoose : IFly {  // 实现飞翔接口
  
};

举的几种鸟中,大雁是最能飞的,让它实现了飞翔接口。实现接口用空心三角形+虚线来表示。



组合

class Bird {
  private Wing wing;
  publice Bird() {  
    // 在鸟Bird类中,初始化时,实例化翅膀Wing,它们之间同时生成
    wing = new Wing();
  }
};

组合( Composition)是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
在这里鸟和其翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。组合关系用实心的菱形+实线箭头来表示。
另外,你会注意到合成关系的连线两端还有一个数字‘1和数字“2,这被称为基数。表明这一端的类可以有几个实例,很显然,一个鸟应该有两只翅膀。如果一个类可能有无数个实例,则就用n’来表示。关联关系、聚合关系也可以有基数的



聚合

class WideGooseAggregate {
  private WideGoose[] arrayWideGoose;  // 在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose
};

再来看大雁与雁群这两个类,大雁是群居动物,每只大雁都是属于一个雁群,一个雁群可以有多只大雁。所以它们之间就满足聚合( Aggregation)关系。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形+实线箭头来表示。



组合和聚合的关系

组合:整体与部分之间的强关系,部分随着整体生命周期的结束而结束(部分不能脱离整体单独存在)。 eg: 鸟(整体)与 翅膀(部分)

part-of 关系,父类拥有子类,子类不能独立与父类存在

聚合:整体与部分之前的弱关系,部分不会随着整体生命周期的结束而结束。eg:电脑(整体)与 鼠标(部分)

has -a 关系,父类包含子类,但子类可以独立存在

一组关联关系是聚合还是组合,要根据实际业务来看,两个类,在不同的场景中可以有不同的关联关系



关联

class Penguin : Bird {
  private Climate climate;  // 在企鹅Peginun中,引用到气候Climate对象
};

企鹅和气候两个类,企鹅是很特别的鸟,会游不会飞。更重要的是,它与气候有很大的关联。我们不去讨论为什么北极没有企鹅,为什么它们要每年长途跋涉。总之,企鹅需要‘知道’气候的变化,需要‘了解’气候规律。当一个类‘知道’另一个类时,可以用关联( association)。关联关系用实线箭头来表示。



依赖

abstract class Animal {
  public Metabolism(Oxygen oxygen, Water water) {
  }
};

动物几大特征,比如有新陈代谢,能繁殖。而动物要有生命力,需要氧气、水以及食物等。也就是说,动物依赖于氧气和水。他们之间是依赖关系( Dependency),用虚线箭头来表示。



关联和依赖的关系

关联和依赖是面向对象设计中的两种不同关系,它们在类图中用来表示不同的概念。关联表示类之间的连接,而依赖表示一个类依赖于另一个类。下面是关联和依赖的更详细解释:

  • 关联(Association):关联表示类之间的连接,它描述了一个类对象和另一个类对象之间的关系。关联可以是双向的,也可以是单向的。在类图中,关联通常用一条直线表示,箭头指向被关联的类。例如,一个学生类和一个课程类之间的关联表示学生选修了某门课程。
  • 依赖(Dependency):依赖表示一个类依赖于另一个类。这种依赖通常是暂时性的,一个类的变化可能会影响到另一个类。在类图中,依赖通常用一条虚线表示,箭头指向被依赖的类。例如,一个订单类的生成可能依赖于一个支付类。

组合、聚合、关联的区别

组合、聚合、关联 是对象之间的三种关系,从某种意义上说,继承是一种类的纵向关系,而聚合,关联,组合是对象的横向关系

组合:你和你的心脏之间是composition关系(心脏只属于自己)
聚合:你和你买的书之间是aggregation关系(书可能是别人的)
关联:你和你的朋友之间是association关系

其关系强弱为:组合 > 聚合 > 关联 > 依赖

posted @ 2024-01-14 21:12  guanyubo  阅读(10)  评论(0编辑  收藏  举报