【Java 设计模式】接口型模式--Adapter(适配器)模式
2017-11-14 09:11
771 查看
【Java 设计模式】接口型模式–Adapter(适配器)模式
Adapter模式的宗旨就是:向客户提供接口,并使用现有的类所提供的服务,以满足客户的需求。 或者说,现在有class A的方法满足客户的部分要求,将另一部分需求抽象为interface B,那么就要有Adapter来使得class A和interface B相互结合,满足客户全部需求。
通俗的理解:在party上,我想去搭讪一个女生Jerry。但是我的英语很烂,于是我拿了个翻译器,翻译器就是我和Jerry之间的Adapter,让我和Jerry可以很好的交谈。
一,类适配器
示例代码
public interface RequiredInterface { /** * 这是客户需要的方法 */ public void requireMethod(); }1
2
3
4
5
6
public class ExistingClass { /** * 这是现有的方法 */ public void usefulMethod(){} }1
2
3
4
5
6
7
适配器角色Adapter扩展了ExistingClass ,同时又实现了RequiredInterface 接口。由于ExistingClass 没有提供requireMethod()方法,而RequiredInterface 又要求这个方法,因此适配器角色Adapter实现了这个方法。
public class Adapter extends ExistingClass implements RequiredInterface { /** * 由于源类ExistingClass没有方法requireMethod() * 因此适配器补充上这个方法 */ @Override public void requireMethod() { //写相关的代码 } }1
2
3
4
5
6
7
8
9
10
二,对象适配器
类适配器通过创建子类来实现适配,在设计类适配器的时候,新的适配器类可以实现期望的接口,并扩展已有的类。而对象适配器则是用委托的方式。
有两种方式,一种是实现接口的方式,一种是继承类的方式。
实现目标接口
示例代码
public interface RequiredInterface { /** * 这是客户需要的方法 */ public void requireMethod(); }1
2
3
4
5
6
public class ExistingClass { /** * 这是现有的方法 */ public void usefulMethod(){} }1
2
3
4
5
6
7
public class Adapter implements RequiredInterface{ private ExistingClass exist; public Adapter(ExistingClass exist){ this.exist = exist; } /** * 源类ExistingClass有方法usefulMethod * 因此适配器类直接委派即可 */ public void usefulMethod(){ this.exist.usefulMethod(); } /** * 由于源类ExistingClass没有方法requireMethod() * 因此适配器补充上这个方法 */ @Override public void requireMethod() { //写相关的代码 } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
继承目标类
示例代码
public class RequiredClass { /** * 这是客户需要的方法 */ public void requireMethod(); }1
2
3
4
5
6
public class ExistingClass { /** * 这是现有的方法 */ public void usefulMethod(){} }1
2
3
4
5
6
7
public class Adapter extends RequiredClass { private ExistingClass exist; public Adapter(ExistingClass exist){ this.exist = exist; } /** * 源类ExistingClass有方法usefulMethod * 因此适配器类直接委派即可 */ public void usefulMethod(){ this.exist.usefulMethod(); } /** * 由于源类ExistingClass没有方法requireMethod() * 因此适配器补充上这个方法 */ public void requireMethod() { //写相关的代码 } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
三,接口的适配器模式
接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,因为并不是所有的方法都是我们需要的,有时只需要某一些,
此处为了解决这个问题,我们引入了接口的适配器模式,借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。
示例代码
public interface RequiredInterface{ public void requireMethod1(); public void requireMethod2(); }1
2
3
4
5
public abstract class AbstractRequiredClass implements RequiredInterface{ public void requireMethod1(){} public void requireMethod2(){} }1
2
3
4
5
public class Adapter1 extends AbstractRequiredClass { public void requireMethod1(){ System.out.println("the RequiredInterface interface's first requireMethod1!"); } }1
2
3
4
5
public class Adapter2 extends AbstractRequiredClass { public void requireMethod2(){ System.out.println("the RequiredInterface interface's first requireMethod2!"); } }1
2
3
4
5
个人觉得适配器模式中的这三种模式是挺灵活的,比如:复用性,系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。还有扩展性在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
不过在使用适配器时,也要注意到除非对系统的架构很清楚,否则过多的使用适配器,会让系统非常零乱,不易整体进行把握。
相关文章推荐
- Java 设计模式 接口型模式 之 适配器Adapter模式 (二)
- Java 设计模式 接口型模式 之 适配器Adapter模式 (二)
- 【Java 设计模式】接口型模式--Adapter(适配器)模式
- JAVA设计模式(DESIGN PATTERNS IN JAVA)读书摘要 第1部分接口型模式——第3章 适配器(Adapter)模式
- Java 设计模式 接口型模式 之 适配器Adapter模式
- JAVA设计模式系列之Adapter(适配器)-Java基础-Java-编程开发
- Java设计模式—适配器(Adapter)
- Java23种设计模式--Adapter(适配器)
- Java设计模式透析之 —— 适配器(Adapter)
- Java设计模式--适配器(Adapter)模式
- Java设计模式透析之 —— 适配器(Adapter)
- Java设计模式透析之 —— 适配器(Adapter)
- Java设计模式--适配器(Adapter)模式
- Java设计模式透析之 —— 适配器(Adapter)
- Java设计模式透析之 —— 适配器(Adapter)
- Java设计模式(三)Adapter(适配器),Bridge(桥接)
- Java设计模式之从[鼠标接口][星际争霸中的兵种行为]分析适配器(Adapter)模式
- java设计模式之Adapter模式 加个适配器以便于复用(1)
- Java设计模式(一) Adapter(适配器)模式及I/O实例引申
- JAVA设计模式-适配器(类适配器、对象适配器)模式-Adapter