设计模式 适配器模式

适配器模式

适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

适配器模式的结构

适配器模式通常涉及以下几个角色:

  • 目标(Target):
    定义客户端所期望的接口。
  • 适配者(Adaptee):
    定义一个已经存在的接口,需要适配这个接口以便与目标接口兼容。
  • 适配器(Adapter):
    适配器类通过继承或组合的方式持有适配者的引用,并将适配者的接口转换为目标接口。

适配器模式的类型

适配器模式有两种主要类型:

类适配器模式:

适配器类通过继承适配者类和目标接口来实现。

期望实现接口, 我们 用 mobilePhone 来表示期望实现的接口信息

复制代码
package AdapterModel;

public interface Target {

    public String mobilePhone(String model);

}

原有接口 实体信息, 现在这个 不适用于最新的信息, 最初这个接口只支持信息是 xiaomi2

java 复制代码
package AdapterModel;

public class mobileAdaptee {

    public String model(){
        return "xiaomi2";
    }
}

我们通过 实现我们期望的接口 并 继承原有的 接口信息 并 重新 处理,现在支持新款 xiaomi6

java 复制代码
package AdapterModel;

public class modelAdapter extends mobileAdaptee implements  Target{
    @Override
    public String mobilePhone(String num) {
        String model = model();
        if("xiaomi".equals(num)){
            return model;
        }
        return "xiaomi6";
    }
}

信息 展现

java 复制代码
package AdapterModel;

public class Main {
    public static void main(String[] args) {
        Target target = new modelAdapter();
        String s = target.mobilePhone("xiaomi");
        System.out.println(s);
        String s1 = target.mobilePhone(null);
        System.out.println(s1);
    }
}

适配器类 Adapter 继承了 Adaptee 类,并实现了 Target 接口。

适配器类可以直接访问适配者类的所有方法。

对象适配器模式:

适配器类通过组合适配者对象来实现。

还是上面那个类, 现在在适配器里通过实现对象时同步创建

复制代码
package AdapterModel;

public class mobile1Adapter implements Target{
    private mobileAdaptee mobileAdaptee;

    public mobile1Adapter(mobileAdaptee mobileAdaptee){
        this.mobileAdaptee = mobileAdaptee;
    }

    @Override
    public String mobilePhone(String model) {
        if("xiaomi".equals(model)){
            return mobileAdaptee.model();
        }
        return "xiaomi6";
    }
}

通过适配器组合实例对象,在实现对他的接口更新适配 实现跟上面效果一样

复制代码
    package AdapterModel;

    public class Main {
        public static void main(String[] args) {
//            Target target = new modelAdapter();
//            String s = target.mobilePhone("xiaomi");
//            System.out.println(s);
//            String s1 = target.mobilePhone(null);
//            System.out.println(s1);

            Target target =new mobile1Adapter(new mobileAdaptee());
            String s = target.mobilePhone("xiaomi");
            System.out.println(s);
            String s1 = target.mobilePhone(null);
            System.out.println(s1);
        }
    }

适配器类 Adapter 实现了 Target 接口,并持有 Adaptee 类的一个实例。

适配器类通过组合适配者对象来实现适配。

适配器模式可以让你轻松地在现有系统中集成新组件,而无需修改现有代码。这有助于提高系统的灵活性和可维护性。

相关推荐
橘猫云计算机设计22 分钟前
基于Springboot的自习室预约系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·毕业设计
秋书一叶1 小时前
SpringBoot项目打包为window安装包
java·spring boot·后端
碎梦归途1 小时前
23种设计模式-结构型模式之外观模式(Java版本)
java·开发语言·jvm·设计模式·intellij-idea·外观模式
极客先躯1 小时前
高级java每日一道面试题-2025年4月13日-微服务篇[Nacos篇]-Nacos如何处理网络分区情况下的服务可用性问题?
java·服务器·网络·微服务·nacos·高级面试
pwzs1 小时前
Spring MVC 执行流程全解析:从请求到响应的七步走
java·后端·spring·spring mvc
我该如何取个名字2 小时前
Mac配置Java的环境变量
java·开发语言·macos
kkkkatoq2 小时前
Java中的锁
java·开发语言
shinelord明2 小时前
【软件系统架构】事件驱动架构
数据结构·设计模式·架构·系统架构·软件工程
界面开发小八哥2 小时前
「Java EE开发指南」用MyEclipse开发EJB 3无状态会话Bean(二)
java·ide·java-ee·eclipse·myeclipse
LCY1333 小时前
spring security +kotlin 实现oauth2.0 认证
java·spring·kotlin