天天看点

设计模式的6种关系

UML图中的六种关系,也是设计模式的6种关系

  • 1、依赖

    假设A类的变化引起B类的变化,则说明B类依赖于A类。

    UML中使用虚线的箭头表示

  • 设计模式的6种关系
  • Java的实现代码:
public class Driver {
    public void driver(Car car) {
        car.move();
    }
}      
public class Car {
    public void move() {
        System.out.println("向前走1000m");
    }
}      
  • 2、关联

    类之间的联系,如用户和订单,每个订单对应特定的客户,每个客户又可以对应一些特定的订单。

    UML中使用直线的箭头表示

  • 设计模式的6种关系
public class Customer  {  
    private Address address;  
}      
public class Address  {  
}      
  • 3、继承

    A是B和C类的父类,B,C具有公共类A,说明A是B,C的一般化。继承关系也称为泛化关系。

    UML中使用直线的空心箭头表示

设计模式的6种关系
import lombok.Data;

@Data
public class Person {
    public  String name;
}      
import lombok.Data;

@Data
public class Student extends Person{
    private String name;
}      
import lombok.Data;

@Data
public class Teacher extends Person{
    public String name;
}      
  • 4、实现

    用来规定接口和实现接口的类或者构建结构的关系,接口是操作的集合,而这些操作用于规定类或者构建的一种服务。

    UML中使用虚线的空心箭头表示

  • 设计模式的6种关系
  • 5、聚合

    表示整体和部分的关系,整体和部分是可以分开的。在聚合关系中,成员类是整体类的一部分,即成员对象是整个对象的一部分,

    但是成员对象可以脱离整个对象独立存在。

    UML中用空心菱形的直线表示。

设计模式的6种关系
  • 6、组合

    整体与部分的关系,当时整体与部分是不可以分开的

    组合关系也是表示类之间的整体和部分的关系,但是组合关系中部分和整体具有统一的生存周期。一旦整体对象不存在,部分对象也不存在

    部分对象与整体对象之间具有相同的生命周期。

    在组合关系中,成员类是整体类的一部分,而且整体类可以控制成员类的生命周期,即成员类的存在依赖于整体类。

    在UML中组合关系用带实心菱形的直线表示。

  • 设计模式的6种关系

总结:

1、聚合与组合

(1)聚合与组合都是一种结合关系,只是额外具有整体-部分的意涵。

(2)部件的生命周期不同

聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。

组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。

(3)聚合关系是“has-a”关系,组合关系是“contains-a”关系。

2、关联和聚合

(1)表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

(2)关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的。

(3)关联是一种结构化的关系,指一种对象和另一种对象有联系。

(4)关联和聚合是视问题域而定的,例如在关心汽车的领域里,轮胎是一定要组合在汽车类中的,因为它离开了汽车就没有意义了。但是在卖轮胎的店铺业务里,就算轮胎离开了汽车,它也是有意义的,这就可以用聚合了。

3、关联和依赖

(1)关联关系中,体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。

(2)依赖关系中,可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A。

综合比较