组合,聚合,关联,依赖的区别
参考http://blog.youkuaiyun.com/zhuyu714997369/article/details/51983871
依赖(Dependency)
含义:是类与类之间的连接,表示一个类依赖于另一个类的定义;依赖关系仅仅描述了类与类之间使用和被使用的关系
体现:在java和C++中体现为局部变量,方法/函数的参数或者是对静态方法的调用;
举例:人依赖于水和空气;汽车依赖汽油;
依赖:比如我要过河,没有桥怎么办,就要借一条船渡过去。我与小船的关系仅仅是使用(借用)的关系
表现在代码上,为依赖的类的某个方法以被依赖的类作为参数。或者classA的某个方法创造了class B的实例亦或者是对Class的静态方法的调用。如果A依赖于B,那么意味着B的变化可能要求A也发生变化
static class Boat{
public static void row(){
System.out.println("开动");
}
}
class Person{
public void crossRiver(Boat boat){
boat.row() ;
}
public void fishing(){
Boat boat = new Boat() ;
boat.row() ;
}
public void patrol(){
Boat.row() ;
}
}
关联(Association)
含义:类与类之间的连接,关联关系使一个类知道另一个类的属性和方法;通常含有“知道”,“了解”的含义。关联可以是双向的,也可以是单向的
体现:在java和C++中关联关系是通过成员变量来实现的
举例:“渔民”需要知道“天气”情况才能够出海
例子:客户和订单的关系以及公司和员工的关系,都是关联关系。还有局势我和我的单车的例子,
他们都是一种拥有关系。表现在代码上,就是一个类包含另一个类的实例,通常表现为被关联的类以类的属性的形式出现在关联类的类的定义中,也可以表现为关联类引用一个类型为被关联的全局变量。关联可以是单向的,也可以是双向的
class Computer{
public void develop(){
System.out.println("Develop ");
}
}
class Person{
private Computer computer ;
public Person(Computer computer){
this.computer = computer ;
}
public void work(){
computer.develop() ;
System.out.println("work");
}
}
依赖和关联的区别在于依赖是使用,关联是拥有
聚合(aggregation)
含义:是关联关系的一种,是一种强关联关系(has-a);聚合关系是整体和个体/部分的关系;关联关系的两个类处于同一个层面上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分;在聚合关系中代表个体/部分的对象有可能会被多个代表整体的对象所共享;
体现:C++中 聚合关系通过将被聚合者的(数组)指针作为内部成员来实现的;
举例:班级和学生,当班级删除时,学生还是存在的学生还可能北培训机构引用
class Classes{
private Student student ;
public Classes(Student student){
this.student = student ;
}
}
class Student{
}
组合(Composition)
含义:他也是关联关系的一种(is-a),但他是比聚合关系更强的关系;组合关系要求聚合关系中代表整体的对象要负责代表个体/部分的对象的整个生命周期;组合关系不能共享;在组合关系中,如果代表整体的对象被销毁或者被破坏,那么代表整体的对象也一定会被销毁或者破坏,而在聚合关系中,代表个体/部分的对象则有可能被多个代表整体的对象所共享,而不一定会随着某个代表整体的对象而销毁或者破坏;
体现:java和C++中,组合关系是通过成员变量来实现的
举例:一个人由头,四肢等器官组成个,器官与人有着相同的生命周器人死了。器官也挂了。房子和房间的关系,房子没了,房间不可能单独存在
class Room{
public Room createRoom(){
System.out.println("创建房间");
return new Room() ;
}
}
class House{
private Room room ;
public House(){
room = new Room() ;
}
public void createHouse(){
room.createRoom() ;
}
}
聚合和组合的区别:聚合是个体离开了整体,依然可以存在 组合是个体和整体不可以分开,个体不能单独离开整体单独存在
依赖,关联和聚合,组合的区别:依赖和关联类之间的关系是在同一层次上
聚合和组合类之间的关系表现为整体和部分