适配器模式

文章目录

适配器模式

适配器模式,客户端通过适配器返回客户端期望的接口。其中适配器将被适配者转化为客户端期望的接口。

比如充电,插座的电压为 220V(被适配者),手机(客户端)通过充电器(适配器)将插座的电压降到 5 V(目标接口)传输电压给手机(客户端)。

种类:类适配器,接口适配器,对象适配器。

适配器模式的角色

  • 客户端:通过适配器访问目标接口
  • 适配器
  • 被适配器
  • 目标接口

类适配器

适配器 adapter 必须继承被适配者,实现目标接口。

案例

代码

被适配者
java 复制代码
/**
 *  被适配者
 *
 * @author: Hui
 **/
public class Adaptee {

    public String method(){
        System.out.println("调用被适配者方法");
        return "被适配者方法";
    }

}
目标接口
java 复制代码
/**
 *  目标对象
 *
 * @author: Hui
 **/
public interface ITarget {

    public String method1();
}
适配器
java 复制代码
/**
 *  适配器
 *
 * @author: Hui
 **/
public class Adapter extends Adaptee implements ITarget{


    @Override
    public String method1() {

        //适配器方法,将原有的方法进行适配
        System.out.println("调用适配器方法");
        String adapteeMenthod = method();
        System.out.println("将被适配器方法进行调整");
        adapteeMenthod = adapteeMenthod.replaceAll("被适配者方法","适配器方法");
        System.out.println("调整成功");
        return adapteeMenthod;
    }
}
客户端使用
java 复制代码
/**
 *  客户端
 *
 * @author: Hui
 **/
public class Client {
    public static void main(String[] args) {
        Adapter adapter = new Adapter();
        String s = adapter.method1();
        System.out.println(s);
    }

}

对象适配器

因为类适配器需要适配器去继承被适配者,不符合合成复用原则,使用对象适配器可以解决这一问题,将被适配者聚合到适配器中。

案例

代码

因为只在上述的类加载器的基础上修改了适配器,所以只贴出适配器的与客户端的代码,其余与类加载器一致。

适配器
java 复制代码
/**
 * 适配器
 *
 * @author: Hui
 **/
public class Adapter implements ITarget {


    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }


    @Override
    public String method1() {

        //适配器方法,将原有的方法进行适配
        System.out.println("调用对象适配器方法");
        String adapteeMenthod = null;
        if (adaptee != null) {
            adapteeMenthod = adaptee.method();
            System.out.println("将被适配器方法进行调整");
            adapteeMenthod = adapteeMenthod.replaceAll("被适配者方法", "适配器方法");
            System.out.println("调整成功");
        }

        return adapteeMenthod;
    }
}
客户端
java 复制代码
/**
 *  客户端
 *
 * @author: Hui
 **/
public class Client {
    public static void main(String[] args) {
        Adapter adapter = new Adapter(new Adaptee());
        String s = adapter.method1();
        System.out.println(s);
    }

}

接口适配器

定义一个多个方法的接口,使用抽象父类来实现该接口并实现接口中的所有方法,子类要使用的话使用覆盖其中的一个方法就可以了。

案例

代码

接口
java 复制代码
package adaper.interfaceAdapter;

/**
 * 作者:灰爪哇
 * 时间:2024-07-18
 * 接口:提供多个方法
 *
 */
public interface ITarget {

    void method1();

    void method2();

    void method3();
}
抽象适配器
java 复制代码
/**
 *
 *
 * @author: Hui
 **/
public abstract class AbsAdapter implements ITarget{
    @Override
    public void method1() {

    }

    @Override
    public void method2() {

    }

    @Override
    public void method3() {

    }
}
客户端
java 复制代码
/**
 *
 *
 * @author: Hui
 **/
public class Client {
    public static void main(String[] args) {
        AbsAdapter absAdapter = new AbsAdapter() {
            @Override
            public void method1() {
                System.out.println("method1 开始执行~~~~  ");
            }
        };

        absAdapter.method1();
    }


}
相关推荐
benbenAItalk9 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl9 小时前
Java学习二 基本语法2, 算术运算符
java·学习
2601_966949659 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin9 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885729 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户9 小时前
Java锁
java·开发语言
多加点辣也没关系10 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob23310 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean210310 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
零依赖极客10 小时前
Day 6·1 ARMv8.2 dotprod——vdotq_s32 一条指令做 4 个点积
c语言·开发语言·人工智能·矩阵·arm·vllm