适配器模式

文章目录

适配器模式

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

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


}
相关推荐
liulilittle1 分钟前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
Bug退退退12333 分钟前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
小皮侠34 分钟前
nginx的使用
java·运维·服务器·前端·git·nginx·github
Thomas_YXQ34 分钟前
Unity URP法线贴图实现教程
开发语言·unity·性能优化·游戏引擎·unity3d·贴图·单一职责原则
Zz_waiting.1 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象
全栈凯哥1 小时前
02.SpringBoot常用Utils工具类详解
java·spring boot·后端
兮动人1 小时前
获取终端外网IP地址
java·网络·网络协议·tcp/ip·获取终端外网ip地址
呆呆的小鳄鱼1 小时前
cin,cin.get()等异同点[面试题系列]
java·算法·面试
独立开阀者_FwtCoder1 小时前
"页面白屏了?别慌!前端工程师必备的排查技巧和面试攻略"
java·前端·javascript
Touper.1 小时前
JavaSE -- 泛型详细介绍
java·开发语言·算法