实战java设计模式(七)适配器模式

1 介绍

适配器模式将一个类的接口转换成客户希望的另外一个接口。

2 类适配器

2.1 例子

使用一个220v电压充电器转5V电压给手机充电的例子。

2.1.1 原电源类(220V)

//220电源类
class Power220V {
    private int Voltage = 220;
    //返回电压
    public int getVoltage() {
        return this.Voltage;
    }
}

当然,该类还可以含有其他方法,但是我关心就是这个输出电压这个方法,不能被我所用。

2.1.2 适配接口

//需要适配的接口
interface Power5V{
    int get5Voltage();
}

接口表示,我需要这个被适配的类适配成什么样子。

2.1.3 适配器类

核心在于:继承被适配器,实现适配接口

//适配器类
class VoltageAdapter extends Power220V implements Power5V{
    @Override
    public int get5Voltage() {
        return this.getVoltage()/44;//被适配器怎么转成适配
    }
}

2.1.4 测试主类

public class Main {
    public static void main(String[] args) {
        Power5V power=new VoltageAdapter();
        System.out.println("获得电压:"+power.get5Voltage()+"V");
    }
}

对外只有那个适配器接口和方法是可见的(使用),其余交给适配器去实现。

2.2 核心角色

  • 被适配类:别人的类,不修改。
  • 适配接口:希望得到什么东西,定义好。
  • 适配器:继承被适配类,实现适配接口。

2.3 核心代码结构

继承被适配类,实现适配接口方法。

3 对象适配器

将被适配对象聚合到适配器中,实现适配器接口。

3.1 例子

3.1.1 被适配类

//220电源类
class Power220V {
    private int Voltage = 220;
    //返回电压
    public int getVoltage() {
        return this.Voltage;
    }
}

3.1.2 适配接口

//需要适配的接口
interface Power5V{
    int get5Voltage();
}

3.1.3 适配器

//适配器类
class VoltageAdapter implements Power5V{
    private Power220V power220V=new Power220V();//虽然这里是组合,但是聚合肯定是较好的
    @Override
    public int get5Voltage() {
        return power220V.getVoltage()/44;//实现适配功能
    }
}

3.1.4 测试主类

public class Main {
    public static void main(String[] args) {
        Power5V power=new VoltageAdapter();
        System.out.println("获得电压:"+power.get5Voltage()+"V");
    }
}

3.2 核心角色

  • 被适配类
  • 适配接口
  • 适配器类:聚合一个被适配对象,实现适配接口,在接口方法里面调用被适配对象方法,改成接口想要的样子。

3.3 核心代码结构

与类适配器不同的是对象适配器聚合了一个被适配的对象。

4 接口适配器

接口适配器实现部分不需要的接口(直接空实现{}无执行代码)。

4.1 例子

##是# 4.1.1 被适配接口

interface A {
    void a0();
    void a1();
    void a2();
}

4.1.2 接口适配器

abstract class Adapter implements A {
    public void a0() {
    }
    public void a1() {
    }
    public void a2() {
    }
}

4.1.3 适配器使用类

class B extends Adapter {
    public void a2() {
        super.a2();
    }
}

4.2 核心代码结构

因为java特性,实现类必须实现接口所有方法,但是有时候只需要实现部分方法,这时候可以加一个接口适配器,它是一个抽象类,但是空实现了所有的接口方法(知识点:抽象类可以不含抽象方法),当具体类再实现的时候,就可以选择性的去重写自己关注的方法了。

5 总结

适配器模式,主要在于适配器接口的设计,把原来那个不变的类(被适配器)处理成适配器接口想要的样子(方法)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值