概述
形象点讲,美国制造的笔记本电源要在中国的插座上充电,首先电源和插座的形状有差别不能直接插上,其次,电源和插座的电压不同,也不能直接使用。为了使电源能够正常的使用,要么更改电源,要么更改插座,要么增加一个适配器(电源和插座都无需改变),显然第三种方案是最佳的。
那么这个适配器该怎么来设计?找出目标接口(从客户入手),然后适配器要实现这个目标接口,在适配器中持有“被适配者”,由客户向适配器发送的request经过转换会交由“被适配者”处理。
软件角度来看,假设已有一个软件系统,原先是使用的旧的厂商的API,现在想要用新厂商提供的接口。但是出现问题如下:
同样,我们不想改变现有系统的代码,也不能改变厂商类的接口,如何解决该问题?可以我们自己或者由厂商提供一个适配器,如下:
对象适配器和类适配器
类适配器:适配器类(adapter)实现目标类(target)继承被适配者类(adaptee),类图如下
对象适配器:被适配者(adaptee)以组合关系被适配器(adapter)持有引用,适配器实现目标接口(target)。类图如下
【扩展】多用组合,少用继承
何时会使用适配器模式
1.系统需要使用现有的类,而此类的接口不符合系统的需要
注:已有的类的接口不符合系统接口要求。增加一个adapter类,该类实现了系统要求的接口,并持有
已有类的接口类型的引用(委托)。
2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,
包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口
注:如xxHelper类(moduleHelper)是可以重复使用的类,
3.在设计里,需要改变已有多个子类的接口,如果使用类的适配器模式,
就要针对每一个子类做一个适配器类。
注:改变接口主要体现为a增加方法 b修改原有方法。
该接口已有多个子类,还要考虑这些类是否已经被系统中其他类广泛引用。
从模式角度来设计的话,为新需求增加一个接口new,同时保留原有的接口old,增加一个adaptor类,
该类实现这两个接口,同时持有old的引用(委托)。
模式举例
示例1:想要遍历一个collection获取其元素,老版本里的做法是集合会返回其元素的枚举(Enumeration),通过该枚举完成遍历,新版本里通常是通过迭代器(Iterator)来遍历。
Enumeration提供方法有:boolean hasMoreElements() 和 E nextElement()。
Iterator提供了:boolean hasNext() 、E next()和 void remove()。
如果对于一个遗留代码,这些代码暴露出枚举器接口,但我们只希望在新的代码中只使用迭代器,可以构造一个适配器,让该适配器实现目标接口(Iterator),同时该适配器组合被适配者(Enumeration),将适配器中的实现转交由被适配者处理(注意remove实现)。
---具体参见《Head First设计模式》
示例2:Runnable/Callable/FutureTask
与其他模式的比较
- 大小: 121.2 KB
- 大小: 38.9 KB
- 大小: 54.5 KB
分享到:
相关推荐
今天我们要探讨的是JAVA设计中的两个重要模式:抽象类与适配器模式。 首先,我们来理解一下“抽象”。抽象是面向对象编程的核心概念之一,它帮助我们处理对象的复杂性。在Java中,抽象通常通过抽象类来实现。抽象类...
在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和UML类图来阐述其工作原理。 首先,我们来理解适配器模式的基本概念。适配器模式就像现实生活中的...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...
Java动态代理模式与适配器模式是两种在软件设计中常用的设计模式,它们都有各自的优点和应用场景。在Java中,动态代理模式主要依赖于Java的反射API和InvocationHandler接口,而适配器模式则用于解决不同接口之间的...
适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...
适配器模式是一种设计模式,它允许不兼容的类或接口之间进行通信,通过创建一个适配器类作为中间桥梁,使得原本不匹配的接口能够协同工作。在Java中,适配器模式广泛应用于系统集成、旧代码复用以及第三方库的兼容性...
适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在这个案例中,我们关注的是如何通过适配器模式解决实际编程问题。文章《适配器模式案例代码》提供了具体的实现示例,链接指向了CSDN博主...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在处理系统集成、遗留代码重用以及不同接口之间兼容性问题时。适配器模式的主要目的是将两个不兼容的接口融合在一起,使得原本无法直接协作...
适配器模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许两个不兼容的接口之间进行通信。在这个“适配器模式demo源码”中,我们可以深入理解这一模式的实现方式及其应用场景。 适配器模式的核心思想...
适配器模式是一种软件设计模式,它在不同的接口之间起到了桥梁的作用,使得原本由于接口不兼容而无法协作的类能够协同工作。这种模式的核心思想是将一个类的接口转换成客户希望的另一个接口,从而使原有类能适应新的...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不同接口的类之间进行通信。适配器模式的核心思想是将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类...
适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在本实验中,我们将深入探讨适配器模式的概念、应用场景以及如何在实际编程中实现它。适配器模式通常分为类适配器和对象适配器两种形式。 ...
适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个源代码实例中,我们看到的是如何通过适配器模式来实现不同对象之间的协作,使得原本无法直接交互的系统组件...
适配器模式(Adapter)是软件工程中一种常用的设计模式,它允许两个不兼容的接口之间进行通信。在C++编程中,适配器模式能够帮助我们复用现有的类,或者将第三方库的接口与我们的系统接口进行对接,从而提高代码的可...