分享
 
 
 

设计模式(Design Patterns)笔记之二:Adapter

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

前言:呵呵,从这起开始,我们换种记录方法怎么样?学学人家的,寓教于乐。第一次尝试,见笑了。^_^

定义:Adapter:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

角色设定:

Helen,初次接触设计模式的美女程序员(没有BF)。

AndyTao,高手,战斗力达到N级,对设计模式有相当程度的了解。

问题的提出:

Helen埋首在公司自己的小空间里写着代码,(旁白:她虽然是个美女,但是写代码的水平还是不错的。)有点问题正在埋头苦想,这时,AndyTao从旁边冒出来,“嗨,美女,到点了,一起吃饭吧?”“不行,我正烦着呢!”Helen皱着眉头说。“哇,谁,谁欺负咱们Helen???”“切,谁敢欺负我啊。”“那怎么了?”AndyTao一副义愤填膺的样子(这小子,司马昭之心)。

“没有啦,我这里程序不好处理。”“噢,我看看!”AndyTao不知什么时候已经在Helen的身后了。

屏幕上一段代码:

public class DrawCircle {

public void DrawCircle() {

……

}

public void insert(String msg){

System.out.println("DrawCircle insert():"+msg);

}

……

}

public class DrawAngle {

public void DrawAngle() {

……

}

public void insert(String msg){

System.out.println("DrawAngle insert():"+msg);

}

……

}

“我现在要在DrawCircle中调用DrawAngle的方法,可是类的已经分发出去了,不能修改,我该怎么办?”

看着美女皱眉头的样子,AndyTao一阵心痛,“这样啊,我给你提示,再写个Adapter类吧。”“什么是Adapter?”

“呵呵,在实际编码过程中,由于某种需要,我们经常要将两个毫无关系的类交互。于是我们需要进行某种修正,修改各个类的接口,这通常不符合编码要求,而且,如果没有源代码,我们又该怎么办?于是,我们就要用到Adapter了,也就是适配器的意思。象你上面的程序,我们不能修改类接口,于是,我们再写一个Adapter类。”

public class DrawAdapter extends DrawCircle {

private DrawAngle drawangle;

public DrawAdapter(DrawAngle angle) {

this.drawangle=angle;

}

public void insert(String msg) {

drawangle.insert(str);

}

……

}

“在上面代码中,DrawAngle属于Adaptee,是被适配者。DrawAdapter是Adapter,将Adaptee(被适配者DrawAngle)和Target(目标DrawCircle)进行适配。实际上这是将组合方法(composition)和继承(inheritance)方法综合运用的一个例子。这样,你就无需对原来的类修改,甚至无需要知道其内部结构和源代码。”

“上面我们说的是对象适配器(Object Adapter),它允许client和Adaptee完全无关,只有适配器知道它们两者的存在。另外,还有一种是类适配器(Class Adapter),它使用多重继承来实现。象对象适配器(Object Adapter)中,就是上个例子,DrawAdapter继承了DrawCircle,但是,DrawAdapter同样可以继承DrawAngle。由于Java不支持多重继承,这就是说,我们的某个类必须定义为接口(interface)。我们可以把DrawAngle定义为接口IDrawAngle,这样代码如下。”

public interface IDrawAngle {

public void insert(String msg);

……

}

public class DrawAngle implements IDrawAngle {

public void DrawAngle() {

……

}

public void insert(String msg){

System.out.println("DrawAngle insert():"+msg);

}

……

}

public class DrawAdapter extends DrawCircle implements IDrawAngle {

private DrawAngle drawangle;

public DrawAdapter(DrawAngle angle) {

this.drawangle=angle;

}

public void insert(String msg) {

drawangle.insert(str);

}

……

}

“看到了么,这样我们就实现了类适配器(Adapter)模式。不过,类适配器(Adapter)有一个问题,如果我们的Target和Adaptee有一个相同名字的方法,Adapter不能保证这两个方法具有相同的含义或者行为,这是非常危险的。所以要注意这种情况!”

“哦,我知道了,Adapter模式的用处就在于使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。从而解决我现在的问题。”

“美女不笨嘛。这顿你请,以后我请,嘿嘿……”

“想追我?这顿我请,以后嘛,呵呵,再说吧。谢谢,走吧。”“OK!”

欲知后事如何,请待下回。^_^

--------------------------------------------------------------------

Yakuu

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有