适配器模式

news/2024/12/28 0:27:59

适配器模式

定义
  1. 将一个接口转换成客户期望的另一个接口。这里的接口可以指一个接口也可以是一个类,一个方法。
  2. 使本来接口不兼容的类可以一起工作。
类型

结构型

使用场景
  1. 已经存在的类,他的方法和需求不匹配时(方法结果相同或相似)
  2. 适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护不同的产品、不同厂家造成的功能相似接口不同的情况下的解决方案。
优点
  1. 能提高类的透明性和复用性,现有的类的服用但不需要改变。
  2. 目标类和适配器类解耦,提高程序的扩展性。
  3. 符合开闭原则

下面开始看代码,首先我们来实现一下类适配器模式。先写一个待适配的类。

public class Adaptee {
    public void adapteeRequest(){
        System.out.println("被适配者的方法");
    }

}

适配接口

public interface Target {
    void request();
}

没有经过适配的接口的实现类

public class ConcreteTarget implements Target {
    @Override
    public void request() {
        System.out.println("concreteTarget目标方法");
    }

}

适配器登场,适配器类继承了待适配的类,同时实现了适配接口,所以我们直接使用super调用父类方法即可。

public class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        //...业务逻辑
        super.adapteeRequest();
        //...
    }
}

测试类

public class ClassadapterTest {
    public static void main(String[] args) {
        Target target = new ConcreteTarget();
        target.request();

        Target adapterTarget = new Adapter();
        adapterTarget.request();



    }
}

运行结果

concreteTarget目标方法
被适配者的方法

我们下面实现一下使用对象组合的方式类实现适配模式,一般情况下我们推荐使用对象组合的方式来实现适配器模式。在使用对象组合的方式我们的待适配类的和适配接口以及原来的接口实现类都是一样的唯一需要改变的就是适配类。

public class Adapter implements Target{
    private Adaptee adaptee = new Adaptee();

    @Override
    public void request() {
        //...
        adaptee.adapteeRequest();
        //...
    }
}

这里的话使用带适配的类的对象来调用带适配的方法。


http://www.niftyadmin.cn/n/1897490.html

相关文章

构建自己的React UI组件库(三):文档编写

序言 该系列文章将跟随作者的开发进度持续更新。 预计内容如下: 构建自己的React UI组件库: (一):从v0.0.0到 v0.0.1 (二):构建首页 (三):文档编写…

需求旺盛,索尼图像传感器即将恢复满产

据一位负责芯片生产的索尼子公司主管说,由于智能手机需求的回升,去年的库存无法满足供应,从10月到明年3月,该公司的图像传感器将恢复满负荷生产。 索尼半导体制造公司总裁植田康弘(Yasuhiro Ueda)在上周五的新闻发布会上表示&…

selenium自动化测试+获取验证码图片

2019独角兽企业重金招聘Python工程师标准>>> 所谓自动化测试,就是通过电脑模拟人为的输入测试。 Selenium 是一个用于Web应用程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样。Selenium 的核心,也称…

跟我学Spring Cloud(Finchley版)-06-服务注册与服务发现-Eureka深入

为什么80%的码农都做不了架构师?>>> 在跟我学Spring Cloud(Finchley版)-05-服务注册与服务发现-Eureka入门 一节中,已经编写了一个Eureka Server,并将服务提供者与消费者都注册到了Eureka Server上。 本节…

vuejs开发H5页面总结

最近参与了APP内嵌H5页面的开发,这次使用vuejs替代了jQuery,仅仅把vuejs当做一个库来使用,效率提高之外代码可读性更强,在此分享一下自己的一些开发中总结的经验。 关于布局方案 当拿到设计师给的UI设计图,前端的首要任…

苹果承认iOS存“1970”变砖漏洞 将发布系统更新

北京时间2月16日消息,据科技博客9to5mac报道,上周,有用户发现,在将iOS设备的系统日期设置为1970年1月1日后,iPhone、iPad或iPod touch就会立刻“变砖”。在对系统日期进行上述调整后,iPhone或其它iOS设备将…

好文推荐:有赞透明多级缓存解决方案(TMC)

专注于Java领域优质技术号,欢迎关注作者:有赞技术团队一、引子1-1. TMC 是什么TMC ,即“透明多级缓存( Transparent Multilevel Cache )”,是有赞 PaaS 团队给公司内应用提供的整体缓存解决方案。TMC 在通用…

python io密集 多线程_python中同步、多线程、异步IO、多线程对IO密集型的影响

1、常见并发类型I/ O密集型:蓝色框表示程序执行工作的时间,红色框表示等待I/O操作完成的时间。此图没有按比例显示,因为internet上的请求可能比CPU指令要多花费几个数量级的时间,所以你的程序可能会花费大部分时间进行等待。CPU密…