在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。
各种关系的强弱顺序:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
1.依赖(Dependence)
定义:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
符号:虚线箭头表示
1、依赖关系也是类与类之间的联结
2、依赖总是单向的。(注意,要避免双向依赖。一般来说,不应该存在双向依赖。)
3、依赖关系在 Java 或 C++ 语言中体现为局部变量、方法的参数或者对静态方法的调用。
代码:
package com.ex.dependence;
/**
*
* 项目名称:uml
* 类名称:Computer
* 类描述:一种开发工具电脑
* 创建人:YinXiangBing
* 创建时间:2014-6-20 下午01:34:49
* @version 6.0
*
*/
public class Computer {
private String code;
private String name;
public Computer(String code,String name){
this.code = code;
this.name = name;
}
public String getComputerName(){
return "型号:"+code+name;
}
}
package com.ex.dependence;
/**
*
* 项目名称:uml
* 类名称:Programmer
* 类描述:程序员类
* 创建人:YinXiangBing
* 创建时间:2014-6-20 下午02:21:59
* @version 6.0
*
*/
public class Programmer {
private String name;
public Programmer(String name){
this.name = name;
}
public void writeCode(Computer cpu){
System.out.println(name+"使用"+cpu.getComputerName());
}
public static void main(String[] args){
Programmer per = new Programmer("大兵");
Computer cpu = new Computer("Y410","联想笔记本");
per.writeCode(cpu);
}
}
2.关联(Association)
定义:对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。关联关系分为单向关联和双向关联。
符号:实线箭头表示
1、关联关系是类与类之间的联结,它使一个类知道另一个类的属性和方法。
2、关联可以是双向的,也可以是单向的(还有自身关联)。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
3、在 Java 或 c++ 中,关联关系是通过使用成员变量来实现的。
代码:
package com.ex.association;
/**
*
* 项目名称:uml
* 类名称:GirlFriend
* 类描述:女朋友类
* 创建人:YinXiangBing
* 创建时间:2014-6-20 下午02:34:04
* @version 6.0
*
*/
public class GirlFriend {
private String name;
public GirlFriend(String name){
this.name = name;
}
public String getName() {
return name;
}
}
package com.ex.association;
/**
*
* 项目名称:uml
* 类名称:BoyFriend
* 类描述: 男朋友类
* 创建人:YinXiangBing
* 创建时间:2014-6-20 下午02:23:38
* @version 6.0
*
*/
public class BoyFriend {
GirlFriend gf;
private String name;
public BoyFriend(String name,GirlFriend gf){
this.name = name;
this.gf = gf;
}
public void sendLoveMail(){
System.out.println(name+"送给"+gf.getName()+"一封情书");
}
public String getName() {
return name;
}
public static void main(String[] args){
GirlFriend gf = new GirlFriend("Rose");
BoyFriend bf = new BoyFriend("Jack",gf);
bf.sendLoveMail();
}
}
3.聚合(Aggregation)
定义:聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
符号:带空心菱形实线箭头表示
1、聚合关系是关联关系的一种,是强的关联关系。
2、聚合是整体和部分之间的关系,例如汽车由引擎、轮胎以及其它零件组成。
3、聚合关系也是通过成员变量来实现的。但是,关联关系所涉及的两个类处在同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
4、关联与聚合仅仅从 Java 或 C++ 语法上是无法分辨的,必须考察所涉及的类之间的逻辑关系。
代码:
package com.ex.aggregation;
/**
*
* 项目名称:uml
* 类名称:Mouse
* 类描述:一种外部设备类
* 创建人:YinXiangBing
* 创建时间:2014-6-20 下午04:15:41
* @version 6.0
*
*/
public class Mouse {
private String code;
private String name;
public Mouse(String code,String name){
this.code = code;
this.name = name;
}
}
package com.ex.aggregation;
/**
*
* 项目名称:uml
* 类名称:Computer
* 类描述:一种开发工具电脑
* 创建人:YinXiangBing
* 创建时间:2014-6-20 下午01:34:49
* @version 6.0
*
*/
public class Computer {
private String code;
private String name;
private Mouse mouse;
public Computer(String code,String name){
this.code = code;
this.name = name;
}
//聚合关系中作为成员变量的类一般使用set方法赋值
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
}