1.单项关联Association
一个类的实例Customer使用另外一个类的实例Address,这两个对象之间为关联关系。
public class Customer {
private Address address;
private String name;
public String getName() {
return name;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
public class Address {
private String name;
public Address(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.聚合Aggregation
聚合是关联的一种,耦合度更高,代码样式差不多,仅仅是语义有区别,关联对象相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。KeyBoard是Computer的一部分,要构成Computer就需要具备KeyBoard这个类。
public class Computer {
private KeyBoard keyBoard;
public KeyBoard getKeyBoard() {
return keyBoard;
}
public
void setKeyBoard(KeyBoard keyBoard) {
this.keyBoard = keyBoard;
}
}
public class KeyBoard {
private String name;
public KeyBoard(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3.组合Compostion
相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。Desk的构成需要DeskTop和Leg,然而单独的DeskTop和Leg并不具备任何现实的意义,它们是不可分割的一部分。
public class Desk {
private DeskTop deskTop;
private Leg[] legs;
public Desk() {
deskTop=new DeskTop("桌面");
legs=new Leg[4];
legs[0]=new Leg("腿1");
legs[1]=new Leg("腿2");
legs[2]=new Leg("腿3");
legs[3]=new Leg("腿4");
}
public String toString() {
return String.format("桌子有一个%s,还有%s、%s、%s、%s",deskTop.getName(),legs[0].getName(),legs[1].getName(),legs[2].getName(),legs[3].getName());
}
}
public class DeskTop {
private String name;
public DeskTop(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Leg {
private String name;
public Leg(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4.泛化 Generalization
Dog和Fish都是Animal的子类,Animal会eat()方法,Dog和Fish都会eat()方法,Dog还具有run()方法,Fish还具有swim()方法。
public class Animal{
public
void eat(){
System.out.println(“动物会吃”);
}
}
public class Bird extends Animal{
public
void fly(){
System.out.println(“鸟会飞”);
}
}
public class Dog extends Animal{
public
void run(){
System.out.println(“狗会跑”);
}
}
5.依赖Dependency
Human类具有两个方法,read(),和eat()方法,这两个方法对应的参数类型是Book类和Food类,所以Human类分别和Book类,Food类都有依赖关系。
public class Human{
public
void read(Book book){
System.out.println(“看”+book.getName());
}
public void eat(Food
food){
System.out.println(“吃”+food.getName());
}
}
public class Book{
private
String name;
public
String getName(){
return
name;
}
public void
setName(String name){
this.name=name;
}
}
public class Food{
private
String name;
public
String getName(){
return
name;
}
public void setName(String
name){
this.name=name;
}
}
6.实现Realization
Student和Teacher都是People,他们都具有People这个接口,涵盖着里面的方法。Student和Teacher重载了相应的sleep()方法。
public interface People{
void
sleep();
}
public class Student implements People{
public
void sleep(){
System.out.println(“学生睡觉”);
}
}
public class Teacher implements People{
public
void sleep(){
System.out.println(“老师睡觉”);
}
}