您的位置:首页 > 其它

设计模式学习:适配器模式

2008-11-04 15:07 417 查看
[b]适配器模式就是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。[/b]

我不知道大家在日常编码中是否用过适配器模式,但适配器的工作模式在我们的生活中却非常常见。本文还是用那个最老套却最有代表性的例子来讲解。现在有一种价值1000元、在3孔插座下工作的电器,但用户只有一个2孔的插座,显然这个电器没法用了。我们用代码模拟这个过程。

模拟电器:

Code

public interface 用户期待接口

{

void 在两孔插座下播放(电器 三孔电器,string 火线, string 地线);

}

public class 适配后的电器 : 用户期待接口

{

public void 在两孔插座下播放(电器 三孔电器,string 火线, string 地线)

{

string 零线 = "";

三孔电器.在三孔插座下播放(火线, 地线, 零线);

}

}

static void Main(string[] args)

{

电器 收音机 = new 电器();

适配后的电器 新电器 = new 适配后的电器();

新电器.在两孔插座下播放(收音机, "火线", "地线");

Console.Read();

}


工作原理很简单,大家自己仔细看看。

有很多朋友认为适配器和代理、装饰都是通过组合一个现存对象,通过调用该对象的方法来实现自己的功能,说他们之间很像,其实结构型模式都是继承和组合的方式来实现新的功能,如果单看实现过程,他们的确都很像,但如果从意图上分析,他们的区别就大了。

代理模式着重将复杂部分抽到中间层,通过这个中间层(代理层)来控制对目标对象的访问,要求代理层和目标对象的接口相同。而适配器模式解决的恰恰是接口发生了变化导致现有对象不能工作的情景,通过组合这个现有对象,将现有接口转化为目标接口的。

装饰模式强调的是通过组合来动态扩展对象功能。比如上述的电器收音机,本身具有播放功能,现在有很多种录音机(日语录音机、中文录音机),在这个收音机上组装一种录音机,使其除了播放功能外还具有录音功能,而且组装不同的录音机,将具有不同语言的录音功能。这种需求就是装饰模式的应用场景。它和适配器模式在意图上有明显的不同。

如果仅仅讲“如何实现适配器”那很简单,但要解释“为什么用、什么时候用适配器模式”就难得多,上面是我在现在这个水平对 “适配器模式”的理解,我相信对设计模式每个人因为工作经验的不同会有不同的认识,欢迎大家讨论并纠正我理解上的偏差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: