适配器模式

适配器模式,顾名思义,起适配的作用,它类似于我们的手机充电适配器,将220V的电压转换成5v的电压。当然,在编程的世界里,是不存在电压的,而是将不同的接口进行适配

 

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口。使得原本接口不兼容的类可以一起工作。适配器模式是对象结构型模式

适配器模式中的接口是广义上的接口,它可以表示一个方法、或方法的集合。适配器模式通过增加一个新的适配器类来解决接口不兼容问题,使原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为类适配器模式和对象适配器模式。在类适配器模式中,适配器与适配者间是继承或实现的关系;而在对象适配器模式中,适配器与适配者间是关联关系。实际开发中,对象适配器使用频率更高

 

完成适配器模式需要3个角色

目标抽象类(Target):定义客户需要的接口、抽象类或具体的类

适配器类(Adapter):可以调用另一个接口,是适配器模式的核心

适配者类(Adaptee):被适配的角色,一般是一个具体的类

 

适配器模式中,根据适配器类与适配者类的关系不同,适配器模式可分为类适配器模式对象适配器模式。在类适配器模式中,适配器与适配者之间是继承或实现的关系;在对象适配器模式中,适配器与适配者之间是关联关系。实际开发中,对象适配器模式使用频率更高

 

下面代码演示适配器模式

类适配器模式

定义目标抽象类

package com.design.structural.adapter.classadapter;

/**
 * 目标抽象类
 */
public interface Target {

    void request();
}

定义适配者类

package com.design.structural.adapter.classadapter;

/**
 * 适配者类
 */
public class Adaptee {

    public void adapteeRequest(){
        System.out.println("被适配的方法");
    }
}

定义适配器类

package com.design.structural.adapter.classadapter;

/**
 * 适配器类
 */
public class Adapter extends Adaptee implements Target {

    @Override
    public void request() {
        super.adapteeRequest();
    }
}

 

类图如下

 

测试调用类

package com.design.structural.adapter.classadapter;

public class TestMain {

    public static void main(String[] args) {
        Target target = new Adapter();
        target.request();
    }
}

 

对象适配器模式

定义目标抽象类

package com.design.structural.adapter.objectadapter;

/**
 * 目标抽象类
 */
public interface Target {

    void request();
}

定义适配者类

package com.design.structural.adapter.objectadapter;

/**
 * 适配者类
 */
public class Adaptee {

    public void adapteeRequest(){
        System.out.println("被适配的方法");
    }
}

定义适配器类

package com.design.structural.adapter.objectadapter;

/**
 * 适配器类
 */
public class Adapter implements Target{

    private Adaptee adaptee = new Adaptee();

    @Override
    public void request() {
        adaptee.adapteeRequest();
    }
}

 

类图如下

 

测试调用类

package com.design.structural.adapter.objectadapter;

public class TestMain {

    public static void main(String[] args) {
        Target target = new Adapter();
        target.request();
    }
}

 

 

适配器模式总结

优点:将目标类与适配者类解耦;增加了类的复用性和透明性;符合开闭原则

缺点:适配器模式编写需要全面考虑,增加系统复杂性;使代码可读性降低

适用场景:已经存在的类,它的方法和需求不匹配;在软件维护中,接口不同的解决方案

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世君子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值