设计模式之—适配器模式

适配器模式

参考

1.简介

适配器模式(Adapter Pattern),是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式它结合了两个独立接口的功能

常见的几类适配器

  • 类的适配器模式
    想将⼀个类转换成满⾜另⼀个新接⼝的类时,可以使⽤类的适配器模式,创建⼀个新类,继承原有的类,实现新的接⼝即可
  • 对象的适配器模式
    想将⼀个对象转换成满⾜另⼀个新接⼝的对象时,可以创建⼀个适配器类,持有原类的⼀个实例,在适配器类的⽅法中,调⽤实例的⽅法就⾏
  • 接⼝的适配器模式
    不想实现⼀个接⼝中所有的⽅法时,可以创建⼀ 个Adapter,实现所有⽅法,在写别的类的时候,继承Adapter类即可

JDK中的InputStreamReader就是适配器。

2.接口的适配器

定义一个手机接口

public interface Phone {

    /*
     *  普通打电话
     * */
    void call();

    /*
     *  视频通话
     * */
    void vedio();

}

现在想要写一个实现类,但是这个实现类只想实现call()方法(假设老年机),这时我们就可以定义一个适配器去实现Phone接口,然后定义一个类直接继承适配器然后重写call()方法即可。

适配器

public class PhoneAdapter implements Phone {
    @Override
    public void call() {

    }

    @Override
    public void vedio() {

    }
}

继承适配器

public class NokiaPhone extends PhoneAdapter {
	
    //只重写call()方法即可。
    @Override
    public void call() {
        System.out.println("诺基亚手机打电话");
    }
}

3.类的适配器

想要将一个类装换成满足另一个新接口的类时,可以使用类的适配器模式,创建一个新类,继承原有的类,实现新的接口即可

在这里插入图片描述

代码实现

假设我们再升级或者优化一个项目时,需要将老的模块中的相关功能进行升级扩展,这个功能目前是由模块中的某个类OldModule类进行实现

public class OldModule {

    public void methodA(){
        System.out.println("OldModule 中的 methodA...");
    }
}

那么我们如何在不改动老模块中OldModule类的前提下,对其所负责的业务功能进行扩展升级呢?

接下来,我们先将要扩展升级的相关功能方法,包括现有功能的方法在目标接口TargetModule中进行定义

public interface TargetModule {

    /**
     * 和需要适配的类的方法名一样
     */
    public void methodA();

    /**
     * 新的方法,如果有多个新的方法直接编写即可
     */
    public void methodB();

    public void methodC();
}

然后通过类的适配器,进行适配OldModuleTargetModule这样就可以做到将⼀个类转换成满⾜另⼀个新接⼝的类,且不改动原有类

//继承OldModule 实现 TargetModule。
public class Adapter extends OldModule implements TargetModule{

    /**
     * 注意: 已经在OldModule中实现的 methodA()是不用再实现的
     */

    /**
     * 新增方法B
     */
    @Override
    public void methodB() {
        System.out.println("Adapter 中的 methodB...");
    }

    /**
     * 新的方法C
     */
    @Override
    public void methodC() {
        System.out.println("Adapter 中的 methodC...");
    }
}

测试

@Test
public void testClassAdapater(){
    TargetModule targetModule = new Adapter();
    targetModule.methodA();
    targetModule.methodB();
    targetModule.methodC();
}

/*
OldModule 中的 methodA...
Adapter 中的 methodB...
Adapter 中的 methodC...
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shstart7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值