博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
适配器模式
阅读量:4182 次
发布时间:2019-05-26

本文共 1685 字,大约阅读时间需要 5 分钟。

适配器模式(Adapter Pattern)是接口模式的一种。

定义

将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作的模式(类似于变压器的模式)。

要素

适配器模式涉及的角色包括:目标、客户、被适配者、适配器(核心)

目标(Target):定义客户端使用的特定接口。
客户(Client):使用目标接口,与和目标接口一致的对象合作。
被适配者(Adaptee):需要被匹配的接口。
适配器(Adapter):负责把Adaptee的接口转成Target的接口。适配器是一个具体的类,这是本模式的核心。

分类

类适配器、对象适配器

类适配器案例:

现在有2个类Target和Adaptee,类Target具有某些功能(request),但是需要一些模块(specialRequest)才能工作。使用适配器模式后的过程就是客户端调用Target接口的request方法,实际上是调用Adapter父类Adaptee的specialRequest方法。

//Target.java(目标)pubic interface Target {
public void request();}//Adaptee.java(被适配者)public Class Adaptee {
public void specialRequest() {
}}//Adapter.java(适配者)public Class Adapter extends Adaptee implements Target {
public void request() {
this.specialRequest(); }}-----------------------------------------------------------------//Client.java(客户)public Class Client {
public static void main(String[] args) {
Target t = ..// new Adapter(); t.request(); }}

类适配器的特点:

  1. 适配器(Adapter)实现客户类(Client)所需要的接口;
  2. 适配器通过继承类适配者类来实现对Adaptee的重用。客户端对象调用适配器类方法的时候,方法内部调用它继承的适配者的方法。
  3. 一定要区分清楚是实现哪个,继承哪个。
对象适配器:

对象适配器包含一个适配者的引用,也需要实现客户类需要的接口,其实就是给类实例化一个对象,通过引用来调用方法,其实就是把继承替换成了对象引用。

//Adapter.javapublic Class Adapter implements Target {
Adaptee a = new Adaptee(); public void request(){
a.specialRequest(); }}-------------------[其余代码和上面完全一样]
两者区别:

类适配器是通过继承 适配者类实现的,适配器也需要是实现客户类所需的(目标类)接口。当客户对象调用适配器类的方法时,适配器内部调用它所继承的适配者的方法。

对象适配器包含一个适配器者的引用(reference),与类适配器相同,对象适配器也实现客户类所需要的接口。客户对象调用适配器类的方法时,适配器内部调用它所包含的适配器者实例的方法。

类图

使用

还是那句话,不要为了使用而使用。在设计阶段没必要把类似的功能类的接口设计的不同。当接口不相同的时候,第一考虑不应该是用适配器,而是通过重构统一接口。

开发后期或者维护阶段再考虑使用适配器。比如设计一个系统时使用第三方开发组件,这个组件的接口与系统接口不相同时,这时使用适配器就不用去为了迎合他们去改动自己的接口。


上一篇:

下一篇:

转载地址:http://clrai.baihongyu.com/

你可能感兴趣的文章
暴力搜索内存空间获得API的线性地址
查看>>
CTF编码
查看>>
万能密码原理和总结
查看>>
缓冲区溢出学习
查看>>
Excel高级使用技巧
查看>>
速算,以后留着教孩子
查看>>
让你变成ps高手
查看>>
在可执行jar中动态载入第三方jar(转贴)
查看>>
考虑体积重量的01背包问题—基于遗传算法
查看>>
K-means 聚类算法
查看>>
带约束的K-means聚类算法
查看>>
约束优化方法
查看>>
VRPTW建模与求解—基于粒子群算法
查看>>
数据结构与算法(1):大O表示法
查看>>
Java学习知识树
查看>>
文科生,你为啥学编程?
查看>>
使用Eclipse时出现Unhandled event loop exception错误的有效解决办法
查看>>
JAVA之路:第一章 JAVA入门初体验
查看>>
菜鸟文科生的java之路:运算符
查看>>
菜鸟文科生的java之路:变量和常量
查看>>