适配器模式

文章目录

适配器模式

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

比如充电,插座的电压为 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();
    }


}
相关推荐
chushiyunen8 分钟前
dom操作笔记、xml和document等
xml·java·笔记
whisperrr.8 分钟前
【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean
xml·java·spring
chushiyunen10 分钟前
tomcat使用笔记、启动失败但是未打印日志
java·笔记·tomcat
天上掉下来个程小白17 分钟前
HttpClient-03.入门案例-发送POST方式请求
java·spring·httpclient·苍穹外卖
ModestCoder_27 分钟前
将一个新的机器人模型导入最新版isaacLab进行训练(以unitree H1_2为例)
android·java·机器人
a180079310801 小时前
软件工程面试题(二十二)
java·面试·软件工程
RainbowSea1 小时前
4. RabbitMQ 发布确认的配置详细说明
java·消息队列·rabbitmq
车载小杜1 小时前
基于指针的线程池
开发语言·c++
robin_suli1 小时前
Spring事务的传播机制
android·java·spring
青云交1 小时前
Java 大视界 -- Java 大数据在智能电网电力市场交易数据分析与策略制定中的关键作用(162)
java·大数据·数据分析·交易策略·智能电网·java 大数据·电力市场交易