分享
 
 
 

设计模式之Visitor——送礼篇

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

设计模式之Visitor——送礼篇

今年过年不收礼,收礼只收脑白金。听到这暗示性的广告词,我的脑袋突然一亮。因为最近因为要办某事,必须要给单位的领导要表示一下。到底送什么,还真让人头痛,还好有脑白金,奶奶的。。。,腐败啊,罪过!

首先要对送礼的对象进行分析,单位有两个领导,一正,一副。因此给不同的领导送的礼也是不同的(哈,收入要和产出成正比吗),好了言归正传。

1、在这里,先把领导定义成一个接口类:

public interface Leader{

public void accept(Visitor visitor); //主要任务----收visitor(拜访者)的礼

}

在把拜访者定义成另一个接口类:

public interface Visitor

{

public void visitFirstHand(FirstHand first); //拜访一把手(带的礼物)

public void visitSecondHand(SecondHand second); //拜访二把手(带的礼物)

public void visitCollection(Collection collection); //判断是拜访一把手还是二把手

}

2、下面我们要对这两个接口进行实现:

A:一把手

public class FirstHand implements Leader {

private String value; //注意此处是String

public FirstHand (String string) {//一把手的构造函数

value = string;

}

public String getValue() { //获得礼物

return value;

}

//定义accept的具体内容 这里是很简单的一句调用

public void accept(Visitor visitor) {

visitor.visitFirstHand (this); //接收拜访人送的礼

}

}

B:二把手

public class SecondHand implements Leader {

private Float value; //注意此处是Float

public SecondHand (Float string) {//二把手的构造函数

value = string;

}

public Float getValue() { //获得礼物

return value;

}

//定义accept的具体内容 这里是很简单的一句调用

public void accept(Visitor visitor) {

visitor.visitFirstHand (this); //接收拜访人送的礼

}

}

C:拜访人(我)

public class visitMe implements Visitor{

public void visitCollection(Collection collection) {

Iterator iterator = collection.iterator();

while (iterator.hasNext()) {

Object o = iterator.next();

if (o instanceof Leader) //判断要送给哪个领导

((Leader)o).accept(this); //不同的领导进入不同的实现类

}

}

public void visitFirstHand (FirstHand first) {

System.out.println("送的礼是:"+ first.getValue());

}

public void visitSecondHand (SecondHand second) {

System.out.println("送的礼是:" + second.getValue());

}

}

3、编写测试类:

public class test {

public static void main(String args[]){

Visitor visitor = new visitMe ();

FirstHand present = new FirstHand ("十盒脑白金");

visitor.visitFirstHand (present);

Collection list = new ArrayList();

list.add(new FirstHand ("十盒脑白金"));

list.add(new SecondHand (new Float("一斤小点心"))); //为了说明不同,如要运行,要做类型转换。

visitor.visitCollection(list);

}

4、说明:

A:代码只用来学习Visitor模式,要运行的话,必须要做一点改动。

B:FirstHand,SecondHand只是一个个具体实现,实际上还可以拓展为更多的实现,整个核心奥妙在accept方法中,在遍历Collection时,通过相应的accept方法调用具体类型的被访问者。这一步确定了被访问者类型

C:使用访问者模式是对象群结构中(Collection) 中的对象类型很少改变,也就是说领导很少变化。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有