大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
聚合(Aggregation) 关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了泰和免费建站欢迎大家使用!
组合(Composition) 关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。
以上关系的耦合度依次增强(关于耦合度的概念将在以后具体讨论,这里可以暂时理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强)。由定义我们已经知道,依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,而组合则是一种更强的关联,所以笼统的来区分的话,实际上这四种关系、都是关联关系。
聚合关系是是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系。例如上例中
pre t="code" l="java"class Driver {
//使用成员变量形式实现聚合关系
Car mycar;
public void drive(){
mycar.run();
}
}假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同灶谨的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。
假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不隐旁基想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法 pre t="code" l="java"public Driver(Car car){
mycar = car;
}所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只启雀给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。/ol
通过RSS把数据整合到一起。确实提供了很多方便。
不知道是不是自己太没有觉悟,没有用sourceforge上面的源码,自己用dom写了一个rss的读取器,代码列在下面吧。
package rssweb;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.CharacterData;
/**
*
Title: RSS页面显示bean
*
*
Description: 通过调用该bean,模判实现在jsp中解析rss并在页面中显示
*
*
Copyright: Copyright (c) 2005
*
*
Company: ui studio
*
* @author uijiang
* @version 1.0
*/
public class ShowRSS {
//PreTitle存储RSS channel项目下的title名
public String PreTitle;
//itemList存储RSS的item项目下的title名
public String[] itemList;
//linkList存储RSS的的item项目下的link名
public String[] linkList;
//pubDateList存储RSS的的item项目下的pubDate名
public String[] pubDateList;
/旦局改/descriptionList存储RSS的的item项目下的description名
public String[] descriptionList;
//itemCount记录读取出来的项目数
public int itemCount;
//不带参数的构造函数,不对各成员初始化,返回null
public ShowRSS() {
}
//将RSS地址以destination传入,实现读取操作,并为腊者各成员变量赋值。
public ShowRSS(String destination) {
try {
//DOM初始化
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.
newInstance();
DocumentBuilder documentBuilder = dbFactory.newDocumentBuilder();
Document document = documentBuilder.parse(destination);
//得出item数量
NodeList nodelistCount = document.getElementsByTagName("item");
itemCount = nodelistCount.getLength();
//初始化各成员数组
itemList = new String[itemCount];
linkList = new String[itemCount];
pubDateList = new String[itemCount];
descriptionList = new String[itemCount];
//赋值计数
int _count = 0;
//获取title并为各成员变量赋值
NodeList nodelistTitle = document.getElementsByTagName("title");
for (int i = 0; i nodelistTitle.getLength(); i++) {
Node node = nodelistTitle.item(i);
if (node.getParentNode().getNodeName().trim() == "channel") {
PreTitle = ((CharacterData) node.getFirstChild()).getData();
}
if (node.getParentNode().getNodeName().trim() == "item") {
itemList[_count++] = ((CharacterData) node.getFirstChild()).
getData();
}
}
//赋值计数
_count = 0;
//获取link并为各成员变量赋值
NodeList nodelistLink = document.getElementsByTagName("link");
for (int i = 0; i nodelistLink.getLength(); i++) {
Node node = nodelistLink.item(i);
if (node.getParentNode().getNodeName().trim() == "item") {
linkList[_count++] = ((CharacterData) node.getFirstChild()).
getData();
}
}
//赋值计数
_count = 0;
//获取pubDataList并为各成员变量赋值
NodeList nodelistpubDate = document.getElementsByTagName("pubDate");
for (int i = 0; i nodelistpubDate.getLength(); i++) {
Node node = nodelistpubDate.item(i);
if (node.getParentNode().getNodeName().trim() == "item") {
pubDateList[_count++] = ((CharacterData) node.getFirstChild()).
getData();
}
}
//赋值计数
_count = 0;
//获取pubDataList并为各成员变量赋值
NodeList nodelistDescription = document.getElementsByTagName(
"description");
for (int i = 0; i nodelistDescription.getLength(); i++) {
Node node = nodelistDescription.item(i);
if (node.getParentNode().getNodeName().trim() == "item") {
descriptionList[_count++] = ((CharacterData) node.
getFirstChild()).
getData();
}
}
} catch (Exception e) {
}
}
}
组合和聚合是有很大区别的,这个区别不是在形式上,而是在本质上:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,
反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。
在实际写代码时组合方式一般会这样写:
A类的构造方法里创则慎唯建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之孙培消亡。
聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。
现实生活中:
人和人和手,脚是组合关系,因为当人死亡后人的手也就不复存在了。
人和他的电脑是聚合关系。
class Hand{ }
class Computer{ }
组合:
class Person{
private Hand hand;
public Person(){
hand = new Hand();
}
}
聚合孝团:
class Person{
private Computer computer;
public setComputer(){
computer = new Computer();
}
}