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

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

1、概述

适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,属于结构型模式。

2、模式结构

  • Target:目标抽象类,定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类
  • Adapter:适配器类,可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配
  • Adaptee:适配者类,定义了一个已经存在的接口,这个接口需要适配,适配者类包好了客户希望的业务方法

3、使用场景

  • 使用一个已存在的类,但它的方法和你的要求不相同时
  • 创建一个可以重复使用的类,用于和一些彼此之间没有太大关联的类,包括一些可能在将来引进的类一起工作

4、优缺点

优点:

  • 将目标类和适配者类解耦,引入一个适配器类来重用现有的适配者类,而无须修改原有代码
  • 增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一适配者类可以在多个不同的系统中复用
  • 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”

缺点:

  • 过多地使用适配器,会让系统非常零乱,不易整体进行把握
  • 不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类

5、实例

在开发中,我们可能会遇到原有的日志系统是保存日志文件中的,但其它项目想把日志保存在数据库中,这种情况下,可不改变日志原有的业务逻辑,扩展一个适配类来实现功能。

ILogFile,日志接口类

public interface ILogFile {    List
getLog();// 获取日志 void writeLog(List
list);// 写日志}

LogFile:日志实现类,即Adaptee类

public class LogFile implements ILogFile {    @Override    public List
getLog() { return null; } @Override public void writeLog(List
list) { }}

ILogDbFile,数据库接口类,即Target类

public interface ILogDbFile {    void createLog(String log);}

LogAdapter,数据库适配类,是Adapter类

public class LogAdapter implements ILogDbFile {    private LogFile logFile;    public LogAdapter(LogFile logFile) {        this.logFile = logFile;    }    @Override    public void createLog(String log) {        List
list = logFile.getLog(); list.add(log); logFile.writeLog(list); }}

以上是对象适配器,在Android中,我们可以常见接口适配器,例如:

public interface ListAdapter extends Adapter {  ...}

转载于:https://www.cnblogs.com/fomin/p/9860912.html

你可能感兴趣的文章
14. Longest Common Prefix
查看>>
浅谈贝叶斯推断
查看>>
Matlab中polyfit和regress
查看>>
C#中async/await中的异常处理
查看>>
新一代的IT实验室长啥样?
查看>>
SQL Server 2005存储过程示例
查看>>
mouseup,mousedown,mousemove,弹出框拖动效果,javascript
查看>>
python:函数和循环判断
查看>>
js 类对象
查看>>
函数可变参传值(python)
查看>>
单双击响应事件处理区分
查看>>
nio通道
查看>>
ORA-12154: TNS: 无法解析指定的连接标识符
查看>>
Java IO模型
查看>>
【2018.11.23】2018WCTest(7)
查看>>
Tomcat中catalina.bat详解
查看>>
Python的hasattr() getattr() setattr() 函数使用方法详解
查看>>
Java注解简单学习
查看>>
ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作
查看>>
VMware exsi 虚拟化嵌套
查看>>