登陆注册
8183300000035

第35章 4 组合模式的使用

小A:“组合模式比较简单,也很容易学习,当你面对一个树形结构的时候,脑筋就该多转一圈:是否可以在该结构中使用组合模式?”

大B:“我跟你讲一种简单的方法:定义一个公用的接口,让组合对象和单个对象都去实现该接口。因此,如果面对单个对象,则调用单个对象的方法;如果面对组合对象,递归遍历之,依次调用每个对象的方法;单个对象:相当于树形结构中的叶节点,它不包含任何子对象。”

小A:“如何去实现组合模式呢?”

大B:“组合对象相当于树形结构中的枝节点,它可以包含更小的枝对象,也可以包含叶对象。下面的代码是以抽象类定义,一般尽量用接口interface。”

public abstract class Equipment

{

private String name;

//实价

public abstract double netPrice();

//折扣价格

public abstract double discountPrice();

//增加部件方法

public boolean add(Equipment equipment){return false;}

//删除部件方法

public boolean remove(Equipment equipment){return false;}

//注重这里,这里就提供一种用于访问组合体类的部件方法。

public Iterator iter(){return null;}

public Equipment(final String name){this。name=name;}

}

大B:“抽象类Equipment就是Component定义,代表着组合体类的对象们,Equipment中定义几个共同的方法。”

public class Disk extends Equipment

{

public Disk(String name){super(name);}

//定义Disk实价为。

public double netPrice(){return 1.;}

//定义了disk折扣价格是0.5 对折。

public double discountPrice(){return。5;}

}

小A:“什么是Disk?”

大B:“Disk是组合体内的一个对象,或称一个部件,这个部件是个单独元素(Primitive)。还有一种可能是,一个部件也是一个组合体,就是说这个部件下面还有‘儿子’,这是树形结构中通常的情况,应该比较轻易理解。”

现在我们先要定义这个组合体:

abstract class CompositeEquipment extends Equipment

{

private int i=0;

//定义一个Vector 用来存放‘儿子’

private Lsit equipment=new ArrayList();

public CompositeEquipment(String name){super(name);}

public boolean add(Equipment equipment){

this。equipment。add(equipment);

return true;

}

public double netPrice()

{

double netPrice=0.;

Iterator iter=equipment。iterator();

for(iter。hasNext())

netPrice =((Equipment)iter。next())。netPrice();

return netPrice;

}

public double discountPrice()

{

double discountPrice=0.;

Iterator iter=equipment。iterator();

for(iter。hasNext())

discountPrice =((Equipment)iter。next())。discountPrice();

return discountPrice;

}

//注重这里,这里就提供用于访问自己组合体内的部件方法。

//上面Disk之所以没有,是因为Disk是个单独(Primitive)的元素。

public Iterator iter()

{

return equipment。iterator()

{

//重载Iterator方法

public boolean hasNext(){return i<equipment。size();}

//重载Iterator方法

public Object next()

{

if(hasNext())

return equipment。elementAt(i );

else

throw new NoSUChElementException();

}

}

大B:“上面CompositeEquipment继续了Equipment,同时为自己里面的对象们提供了外部访问的方法,重载Iterator,Iterator是Java的Collection的一个接口,是Iterator模式的实现。”

同类推荐
  • 都是网络惹的祸

    都是网络惹的祸

    本书分网络游戏、网络聊天、网络隐私、网络网吧安全、网络文化、网络语言、网络犯罪、网络陷阱等栏目,从不同的视角探讨了在当今社会的网络现象。
  • 大话设计模式

    大话设计模式

    本书主要采用JAVA语言介绍设计模式中比较常见的23种设计模式,分29章具体介绍,以现实生活中常见的事情为例来具体分析讲解。
  • 信息技术教育大全-操作系统大全

    信息技术教育大全-操作系统大全

    本书系统介绍说明了有关电子信息系统及操作系统等知识,希望对该信息技术有需求的读者能够从中得到帮助。
  • 计算机与人工智能(科学新知丛书)

    计算机与人工智能(科学新知丛书)

    本书是专门为中小学生编写的科普读物。全书共分八个部分,分别就计算机诞生的历程,计算机的种类、构造、作用及其发展趋势等方面进行了详尽的论述,全书论述深入浅出,行文活泼流畅。为本书的主要读者——广大的中小学生朋友认识计算机、了解计算机和掌握计算机提供了一把钥匙,是新时期中小学生开展素质教育不可多得的科普读物,中小学生家长及教师阅读此书也能从中获得有益的启示和感悟。
  • 玩转手机

    玩转手机

    本书主要包括:手机的发展历史、手机知识、手机的选购与巧用、手机与网络、手机短信等内容。
热门推荐
  • 夫人真有任务

    夫人真有任务

    【简介废的一批看看正文吧】【新手上路求包容】【略带魔幻】【双洁1V1】飞鸟大陆被屏障隔离,为了让飞鸟游鱼两位大神化成的岛屿团聚,转世的大神被曾经的属下安排的明明白白。以齐意和莫归南为主线剧情走下去,期间会遇到许多悲欢离合,兄妹、兄弟、主人和器灵等六至七个篇章,请自行备好纸巾,心灵够强大憋的住的自己坚强,也可以问酒我要安慰。桑桑篇正在更新…
  • 夜尽之时

    夜尽之时

    一次事故,两个朋友,三方密战,四方追缉,这是一场证人的逃亡之旅,终点是否在法庭,拭目以待
  • 剑尘一心

    剑尘一心

    上古纪元群雄皆起争霸天下,剑神一剑止戈天下,亿万神魔签订盟重契约。剑家后人以守卫天下为己任兼顾苍生,每六十甲子出世一人破虚納仙润泽苍生。。。
  • 随身携带灵魂商城

    随身携带灵魂商城

    在地球大灾难前夕,穷困潦倒的陆千忽然发现自己有一个商城,里面出售着玄乎又玄的物品。“时空漫游”、“灵骨再生露”、“易经洗髓丹”、“再世为人卷轴”、“还魂丹”、“低武拳术”、“高武剑术”......甚至出售一颗未开发的星球。从此开启了别样的人生。
  • 重生娘娘有点甜

    重生娘娘有点甜

    祁韵重生了!上一世她被府上的姐妹栽赃陷害,导致父亲的厌恶和母亲的失望,加上自己天不怕地不怕的性格,活生生把自己作没了。直到临死之前,她才知原来自己平日里那所谓的好姐妹们,个个都恨不得把自己碎尸万段。原因就是自己有一个婚约。听说自己素未谋面的未婚夫挺厉害的,当今皇上都得拉下面子哄着他。十四岁上战场,十五岁拿下第一个军功!他训练的一万精兵抵得上人家的五万!祁韵啧了啧嘴。不知道九爷腿部却挂件不?能扫地做饭的那种……
  • 重生之超级仙帝

    重生之超级仙帝

    一代仙帝独创修光之道,战死陨落,一丝残魂重生都市,开启强者逆天之路。光修,厚德载物,光明磊落,掌控光之本源,以天地间一切光芒为修炼资源。仙帝残魂重生,强势崛起,一切敌人要么臣服要么灰飞烟灭。“吾乃光修,掌控光芒,有光之处,吾即是王!”
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 精灵世界系统

    精灵世界系统

    被创造的精灵世界,咸鱼的主角,精灵的系统。
  • 新概念作文获奖者范本才女卷

    新概念作文获奖者范本才女卷

    中考、高考的最佳作文圣经,开卷有益的青春文学阅读宝典。舞动年华,飞扬青春,第十六届新概念作文大赛获奖实力作者超强阵容华丽呈现主题多样,字字珠玑,全方位集合新概念获奖作文精粹,全新个性装帧设计,精美时尚彩插,尽显青春气息。
  • 掏心魔

    掏心魔

    一个温柔的师父和一个腹黑徒儿的故事,一向率真活泼的徒儿的真实身份是什么?她潜在师父身边的目的是什么?师父为什么会中了一种致命的毒,他经历了什么?