博客
关于我
设计模式6-适配器模式
阅读量:716 次
发布时间:2019-03-21

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

适配器模式详解

适配器模式是一种常见的软件设计模式,旨在解决接口不匹配或功能需求改变的问题。以下将从类适配器模式、对象适配器模式以及接口适配器模式三个方面详细阐述。

类适配器模式

类适配器模式的核心思想是:有一种源类(Source),其中含有一个需要适配的方法;目标是定义一个接口(Targetable),希望将源类的功能扩展到目标接口中。这时,通过创建一个Adapter类,使源类的方法能够实现目标接口的要求。

源代码示例

public class Source {    public void method1() {        System.out.println("这是一段源代码");    }}

目标接口

public interface Targetable {    void method1();    void method2();}

适配器实现

public class Adapter implements Targetable {    @Override    public void method2() {        System.out.println("这是一段适配器新增的功能");    }    @Override    public void method1() {        // 调用源类的方法        ((Source) this).method1();    }}

使用示例

public class AdapterTest {    public static void main(String[] args) {        Targetable target = new Adapter();        target.method1();        target.method2();    }}

通过上述代码,我们可以看见Adapter类不仅实现了Targetable接口的method2()方法,还重写了method1(),并通过动态_cast调用源类的方法,从而完成了对源接口方法的适配。

对象适配器模式

对象适配器模式与类适配器模式的核心思想相似,但实现方式有所不同。对象适配器并不直接继承源类,而是持有源类的实例,并通过调用实例方法来实现目标接口的需求。

适配器实现

public class Wrapper implements Targetable {    private Source source;        public Wrapper(Source source) {        this.source = source;    }        @Override    public void method2() {        System.out.println("这是一段适配器新增的功能");    }        @Override    public void method1() {        source.method1();    }}

使用示例

public class AdapterTest {    public static void main(String[] args) {        Source source = new Source();        Targetable target = new Wrapper(source);        target.method1();        target.method2();    }}

相比类适配器,对象适配器的主要优势在于减少了类间直接继承的复杂性,而是通过持有实例的方式来实现功能适配。

接口适配器模式

接口适配器模式的主要场景是当我们需要实现一个接口,但其中某些方法不需要完全实现时。通过接口适配器,我们可以创建一个基准实现,其他具体实现类只需要继承基准实现即可。

基准接口

public interface Sourceable {    void method1();    void method2();}

基准实现

public abstract class Wrapper2 implements Sourceable {    @Override    public void method1() {}    @Override    public void method2() {}}

具体实现类

public class SourceSub1 extends Wrapper2 {    @Override    public void method1() {        System.out.println("SourceSub1实现了method1");    }}
public class SourceSub2 extends Wrapper2 {    @Override    public void method2() {        System.out.println("SourceSub2实现了method2");    }}

使用示例

public class WrapperTest {    public static void main(String[] args) {        Sourceable sourceable1 = new SourceSub1();        Sourceable sourceable2 = new SourceSub2();        sourceable1.method1();        sourceable1.method2();        sourceable2.method1();        sourceable2.method2();    }}

通过接口适配器模式,我们可以灵活地实现接口中的不同方法,减少了不必要的代码重复。

总结

  • 类适配器模式:适用于需要将源类的功能适配到新接口时,通过创建一个继承源类的新类来实现目标接口的要求。
  • 对象适配器模式:适用于将源类的实例持有,并通过调用实例方法来实现目标接口的需求。
  • 接口适配器模式:适用于需要对接口进行部分实现时,通过创建一个基准实现类,其他实现类只需继承基准实现即可。

这三种适配器模式各有特点,但都在解决接口兼容性问题方面发挥着重要作用。选择适当的适配器模式,是成功设计的关键所在。

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

你可能感兴趣的文章
python基于flask搭建http服务(四)—— Docker容器化部署
查看>>
Python块键盘/鼠标输入
查看>>
python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
查看>>
python在gpu上运行_【python】python开启GPU加速
查看>>
Python在def函数中使用for循环
查看>>
Python在def函数中使用for循环
查看>>
Python在Conda环境中,但在Windows虚拟环境中没有激活
查看>>
python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
查看>>
python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
查看>>
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>
Python哪个版本最稳定好用2023.10.19
查看>>
Python和黑客技术的渊源
查看>>
Python和RF编写接口自动化
查看>>
python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
查看>>
python和java哪个更值得学——来自知乎高赞回答
查看>>
python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
查看>>