您的位置:首页 > 其它

类关系(UML&设计模式)

2014-06-30 10:25 344 查看
类之间存在的6种关系:

依赖 关联 聚合 组合 实现(接口) 继承(泛化)

其中,聚合和组合是关联的两种具体关系,关联包含组合和聚合。

关系强弱:依赖是关系最弱的,关联是强依赖,聚合是强关联,组合是强聚合。

注意:继承比起接口,可以扩展,接口最好不要扩展。

各种关系图与代码:

1.依赖:





代码:

Public class A {//注意这没有定义类B在类A中的私有变量

public B operation(B b){//返回值和方法参数
b.opb();//方法参数位置
B bb = new B();//局部变量
bb.opbb();
B.staticop();//静态方法调用
}
}

描述:

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

2.关联:





代码:

Public class A{

Private B b;

}

描述:

体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系 也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中, 也可能是关联类A引用了一个类型为被关联类B的全局变量

3.聚合:





代码:

Public class A{

Private B b;

public set(B b){

This.b=b;

}

}

描述:

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可 以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

4.组合:





代码:

Public class A{

Private B b = new B(); //第一种方法;

Public A(){ b=new B(); } //第二种方法;

Public A(B b){ This.b=b; } //第三种方法;

}

描述:

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体 与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。

5.实现(接口):





代码:

Public class A{

public void op1();

public void od2();

}

public class B implements A{

public void op1(){必须实现;}

public void op2(){必须实现;}

public void op3(){可以扩展但不提倡;}

}

描述:

指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

6.继承:





代码:

Public class A{

public void op1();

public void od2();

}

public class B implements A{

public void op1(){必须实现;}

public void op2(){必须实现;}

public void op3(){可以扩展,提倡扩展;}

...

}

描述:

指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;

总结

在Java中,应该尽量优先使用组合,而不是继承,因为继承会使得类关系过于复杂化,破坏了封装性,使用组合一样可以获得已有类的功能,而且会使新类更加稳固。

实际上,从依赖 -----〉聚合--------〉组合,类与类之间的关系更加紧密,互相之间的影响越来越大,其实我们平常比较少去区分这些关系,而且事实上这东西的定义不太好理解,所以肯定会导致认识上的偏差,所以我们使用这些东西的时候,尽量靠近大家都认同的做法,这样容易让别人理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: