Java设计模式系列——适配器模式

1、适配器模式应用场景

适配器模式(Adapter Pattern)是指将一个类的接口转换成用户期望的另一个接口,使原本接口不兼容的类可以一起工作,属于结构型设计模式。适配器模式适用于以下集中业务场景:

  • 已经存在的类的方法和需求不匹配(方法结果相同或者相似)的情况。
  • 适配器模式不是软件设计初始阶段考虑的设计模式,是随着软件的发展,由于不同的产品、不同厂家造成功能类似而接口不同的问题的解决方案。

2、适配器模式详解

2.1、适配器模式角色构成

一般来说,适配器模式有以下三种角色:

  • 目标接口(Target):定义用户使用特定领域相关的接口。
  • 被适配者(adaptee):定义了一个已经存在的接口,这个接口将被适配。
  • 适配者(adapter):适配器,对target 和 adaptee 接口进行适配。
2.2、适配器模式分类
  • 类的适配器模式(采用继承实现)
    类的适配器模式设计类图
  • 对象适配器(采用对象组合的方式实现)
    对象适配器模式设计类图
    我们先来看下这两种实现模式的优缺点:
  • 类适配器采用继承的实现方式,带来了不良的高耦合
  • 对象适配器采用对象“组合”的方式,更符合松耦合的设计原则
  • 对Java语言来说,类适配器无法面对多个被适配对象,因为语言不支持多继承

3、适配器模式的实现步骤及案例

我们日常生活中常见的一个场景,我国民用电都是220V的交流电,但是我们手机充电使用的一般都是5V的直流电,所有我们给手机充电的是就需要专门的充电器(也就是电源适配器)。下面看一下代码还原这个场景。

3.1、确定适配目标接口

我们这里的目标接口就是我们需要的DC5V直流接口

package com.example.demo.adapter;

public interface DC5V {

    int outPut();

}
3.2、确定被适配者

这里的被适配者就是我们的民用交流电AC220

package com.example.demo.adapter;

public class AC220 {

    public int outPutAc220() {
        int output = 220;
        System.out.println("输出交流点:" + output);
        return output;
    }

}
3.3、创建适配器

这里我们分别用之前提到两种实现方式分别创建适配器。

类适配器

package com.example.demo.adapter;

public class ClassPowerAdapter extends AC220 implements DC5V {
    @Override
    public int outPut() {
        int input = new AC220().outPutAc220();
        int adapterOutput = input / 44;
        System.out.println("使用ClassPowerAdapter输入AC:" + input + "V" + "输出DC:" + adapterOutput + "V");
        return adapterOutput;
    }
}

测试

public static void main(String[] args) {
        ClassPowerAdapter classPowerAdapter = new ClassPowerAdapter();
        classPowerAdapter.outPut();
    }

结果如下:
在这里插入图片描述
对象适配器

package com.example.demo.adapter;

public class ObjectPowerAdapter implements DC5V {

    private AC220 ac220;

    public ObjectPowerAdapter(AC220 ac220) {
        this.ac220 = ac220;
    }

    @Override
    public int outPut() {
        int input = ac220.outPutAc220();
        int adapterOutput = input / 44;
        System.out.println("使用ClassPowerAdapter输入AC:" + input + "V " + "输出DC:" + adapterOutput + "V");
        return adapterOutput;
    }
}

测试

 public static void main(String[] args) {
        DC5V dc5V = new ObjectPowerAdapter(new AC220());
        dc5V.outPut();
    }

结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值