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

摘要:
适配器模式将类的接口转换为客户端需要的另一个接口。类结构图以用户期望的目标接口为目标。Adaptee需要一个经过调整的类或接口。代码示例/***提供给客户的目标接口*/publicinterfaceTarget{voidnewMethod();}}/**项目的原始旧接口不需要更改*/publicinterface=Adapte{voiloldMethod());

适配器模式
将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Adapter 模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。

首先应该明白一点,适配器是最后的补救措施,应该在功能设计的时候尽量避免。所以请在设计功能的时候忘掉这个模式。

类结构图
在这里插入图片描述
Target
用户期待的目标接口。
Adapter
适配器,通过在内部包装一个 Adaptee 对象,把源接口转换成目标接口。
Adaptee
需要适配的类或接口。

代码示例

/**
 * 提供给客户的目标接口
 */
public interface Target {
    void newMethod();
}

/**
 * 适配器
 */
public class Adapter implements Target {
    private Adaptee adaptee = new ConcreteAdaptee();
    @Override
    public void newMethod() {
        adaptee.oldMethod();
    }
}

/**
 * 项目原先的老接口不需要改动
 */
public interface Adaptee {
    void oldMethod();
}

/**
 * 老接口的具体实现
 */
public class ConcreteAdaptee implements Adaptee {
    @Override
    public void oldMethod() {
        System.out.println("老接口功能 method!");
    }
}

客户端示例

public class Client {
    public static void main(String[] args) {
        Target target = new Adapter();
        target.newMethod();
    }
}

运行结果

老接口功能 method!

Process finished with exit code 0

使用场景
只要记住一点。当你有动机修改一个已经投入生产的接口,这时候就可以考虑试用适配器模式。适配器模式是用于解决接口不兼容问题有效方法。

优点

  1. 可以让任何两个没有关联的类一起运行。
  2. 提高了类的复用。
  3. 增加了类的透明度。
  4. 灵活性好。

缺点
过多地使用适配器,会让系统非常零乱,不易整体进行把握。

注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android操作系统11种传感器介绍【Android游戏开发之四】基础的Android 游戏框架(一个游戏角色在屏幕行走的demo)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF做的小型音乐播放器升级版

上一个版本 是利用周日休息时间制作的,考虑不充分,开发时间也短,只完成了加载频道列表和播放歌曲的功能.这几天晚上在家进行了部分加工,首先是完善了部分功能,其次对部分不合理的设计进行了重构(还不知道重构得合理不合理). 首先看下部分功能截图: 首先是搜索功能完成了部分.点击搜索功能会切换到该频道,并加载歌曲放歌.设计时,就把搜索做成了一个模块,频道是一个模...

学习pycharm----自动化接口

1.pycharm中安装requests a:打开pycharm软件,点击file-setting b:在目录下点击Project Interpreter,在目录的右侧,点击右上方的+ c: 在输入框中输入requests,点击安装(提示sucessful时,表名安装第三方库成功) ps:在pycharm中安装其他第三方库是一样的步骤 2.使用pychar...

DOM,javascript,Web API之间的关系——onclick 引起的思考与调研

平时习惯了用js操作dom树来与html页面进行交互,基本都是通过web API接口实现的,最近看闭包和原生js的知识点比较多,昨天无意中看到了onclick中的this指向问题,遂用native js方式模拟了onclick再html标签里的this和js事件里的this,详见上一篇博客:用js的eval函数模拟Web API中的onclick事件 下文...

HK2使用详解

HK2介绍 组件 生命周期 定义服务 注入服务 HK2介绍 HK2是一个轻量级动态依赖注入框架,它是JSR-330的实现。 组件 在HK2组件模型中,一个组件的功能是通过服务接口-服务实现的模式声明的。一个HK2服务接口 标识并描述了一个构建模块或者应用程序扩展点。HK2服务实现实现了HK2服务接口。 #### 组件模型 (HK2)提供了一个模块系统和...

HSF处理流程分析

一.HSF的基本概念 HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实...

idea 搭建运行kafka 源码

环境搭建: 一 下载源码。1.源码下载: 从GitHub下载https://github.com/apache/kafka.git。 下载完之后在IDEA setting--Plugins 处安装Scala 插件,再按照提示下载scala jar包。 2.配置工程: 二 运行源码1.启动kafkaKafka.scala是kafka的启动类,按照如下配置...