java基础知识拓展
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一类之间的关系:
类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。纵向关系:继承关系或实现关系。
1 继承关系inheritance:
一个类继承另外一个类的功能,同时可以增强自己的功能。是is-a关系,即表示特殊---->一般的关系。使用实线三角箭头指向父类。
2 实现关系implements:
一个类实现接口的功能,同时可以增强自己的功能。表示类是接口所有行为和方法的实现。使用虚线三角箭头指向接口。
横向关系:按照UML的建议大体上可以分为两种:
1 依赖(Dependency)
2 关联(Association)
1) 聚合(Aggregation)
2) 组合(Composition)
它们的强弱关系是没有异议的:依赖< 关联< 聚合< 组合
依赖关系:
UML表示法:虚线+ 箭头
关系:" ... uses a ..."
此关系最为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。
典型的例子很多,比如:
class Human
{
public void goRiver(Ship ship)
{
ship.go()
}
public static void main()
{
Human me = new Human();
Ship ship = new Ship();
me.goRiver(ship);
}
}
class Ship
{
public void go()
{
//do sth.
}
}
释义:遇到河流,行人想通过的话,只能坐床。船只只不过是人类的一个工具,而人并不持有对它的引用。
备注:
依赖双方之间关系是偶然的,临时的。通常把被依赖类作为依赖类的形参传入。是一种使用关系。
关联关系:
UML表示法:实线+ 箭头
关系:" ... contains a ..."
所谓关联就是某个对象会长期的持有另一个对象的引用,而二者的关联往往也是相互的。关联的两个对象彼此间没有任何强制性的约束,只要二者同意,可以随
时解除关系或是进行关联,它们在生命期问题上没有任何约定。被关联的对象还可以再被别的对象关联,所以关联是可以共享的。
典型的例子很多,比如:
public class Company { //公司
private Employee emp ; //一个公司雇员,公司与雇员之间就是一种关联关系。
}
public class Employee{
}
释义:雇员作为公司的属性,不同于上面的依赖。依赖的话,雇员的改变会影响
公司,显然不是。在这里雇员仅仅作为公司的一个属性而存在。因此Employee
与Company之间是关联关系。
备注:
关联关系是长久性的,双方的关系是平等的。可以是双向或单线。代码实现通常被关联类以其他类的类属性方式存在。
关联关系还可以细分为聚合和组合两种。
聚合关系:
UML表示法:空心菱形+ 实线+ 箭头
关系:" ... has a..."
聚合是强版本的关联。它暗含着一种所属关系以及生命期关系。被聚合的对象还可以再被别的对象关联,所以被聚合对象是可以共享的。虽然是共享的,聚合代表的是一种更亲密的关系。
典型的例子很多,比如:
public class Student{
}
public class School{
private List
}
释义:学校和学生的关系。聚合的整体和部分之间在生命周期上没有什么必然的联系,部分对象可以在整体对象创建之前创建,也可以在整体对象销毁之后销毁。备注:
是拥有的关系,整体与部分可以分离。代码级别和关联一致,只能从语义区别。其他例子:
车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
组合关系:
UML表示法:实心菱形+ 实线+ 箭头
关系:" ... is a part of ..."
组合是关系当中的最强版本,具有更强的拥有关系,强调整体与部分的生命周期是一致的,整体负责部分的生命周期的管理。
典型的例子很多,比如:
class Human
{
Heart myHeart = new Heart();
public static void main()
{
Human me = new Human();
while(true)
{
myHeart.beat();
}
}
}
释义:组合关系就是整体与部分的关系,部分属于整体,整体不存在,部分一定不存在,然而部分不存在整体是可以存在的,说的更明确一些就是部分必须创生于整体创生之后,而销毁于整体销毁之前。
备注:
关联关系的一种特例,是contains-a的关系。体现整体与部分的不可分割关系。代码级别和关联一致,只能从语义区别。
其他例子:
球员小贝和他的飞毛腿
二。建造者模式:
建造者模式
概述
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式