结构型设计模式之适配器模式

本文介绍了设计模式中的适配器模式,包括类适配器、对象适配器和接口适配器三种形式。类适配器通过继承被适配类并实现目标接口来完成转换;对象适配器则通过聚合被适配类对象实现转换,提供更大的灵活性;接口适配器允许选择性地实现多个接口中的部分方法。文章通过电压转换的例子详细阐述了这三种适配器模式的使用。
摘要由CSDN通过智能技术生成


前言

之前的文章主要研究了设计模式中的创建型设计模式,创建型设计模式主要包括工厂方法模式,抽象工厂模式,建造者模式,单例模式和原型模式。
从这篇文章开始继续研究设计模式中的结构型模式,顾名思义,结构型模式就是用来设计程序的结构的。结构型模式包括9种,本文只研究适配器模式


一、适配器模式

1.类适配器

在这里插入图片描述Adapter类通过继承被适配类,实现adapter接口,实现对应的转换,简单的例子如下:

/**
 * adapter通过继承src类 实现dst接口 来完成src-dst的视频
 */

//家庭电压
class HomeVoltage {
    private int vol = 220;
    public int show(){
        System.out.println("电压为:" + vol + "V");
        return vol;
    }
}
interface VoltageAdapter{
    public int adapter();
}

//适配器直接转换为手机电压5v
class VoltageAdapterImpl extends HomeVoltage implements VoltageAdapter{
    public int adapter() {
        int vol = show();
        System.out.println("家庭电压转换为:" + vol + "V");
        vol /= 44;
        System.out.println("适配器将电压转换为:" + vol + "V");
        return vol;
    }
}

//手机通过适配器来进行充电
class Phone {
    public void charge(VoltageAdapter adapter){
        adapter.adapter();
    }
}

public class ClassAdapter {
    public static void main(String[] args) {
        Phone phone = new Phone();
        phone.charge(new VoltageAdapterImpl());
    }
}

其中VoltageAdapterImpl是具体的Adapter类,通过继承被适配类,实现VoltageAdapter接口来完成转换,也就是完成电压从220V到5V的转换。

2.对象适配器

![在这里插入图片描述](https://img-blog.csdnimg.cn/0775373a353040acaf407387bd5f0bb7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bq45Lq65bKz,size_12,color_FFFFFF,t_70,g_se,x_16#pic_center

对象适配器,即将第一种适配器方法中获取被适配对象的方法从继承修改为聚合(简单理解就是:方法1是通过继承来获取被适配器对象的属性,而该种是直接定义被适配类对象),只需修改VoltageImpl方法即可,代码示例如下:

//适配器直接转换为手机电压5v
//不再继承HomeVoltage 而是在类中直接定义HomeVoltage对象,即聚合HomeVoltage对象
class VoltageAdapterImpl2 implements VoltageAdapter{
    private HomeVoltage homeVoltage;
    public int adapter() {
        int vol = homeVoltage.show();
        System.out.println("家庭电压转换为:" + vol + "V");
        vol /= 44;
        System.out.println("适配器将电压转换为:" + vol + "V");
        return vol;
    }
}

通过这种方法也可以实现转换,而且方式更加灵活。

3.接口适配器

在这里插入图片描述

接口适配器指的是,要被适配的对象有很多接口,但是实现接口的类可能不需要实现全部的方法,则可以选择性的实现对应的方法,而不需要全部实现,简单的代码示例如下:

interface VoltageAdapter2{
    public void adapter5V(int vol);
    public void adapter10V(int vol);
    public void adapter20V(int vol);
    public void adapter30V(int vol);
}

class VoltageAdapter3 implements  VoltageAdapter2{


    @Override
    public void adapter5V(int vol) {

    }

    @Override
    public void adapter10V(int vol) {

    }

    @Override
    public void adapter20V(int vol) {

    }

    @Override
    public void adapter30V(int vol) {
        System.out.println("转换电压为: " + vol + "v");
    }
}

class Conditioner {
    public void charge(VoltageAdapter2 adapter){
        adapter.adapter30V(30);
    }
}

public class InterfaceAdapter {
    public static void main(String[] args) {
        Conditioner conditioner = new Conditioner();
        conditioner.charge(new VoltageAdapter3());
    }

}

空调适配器只实现了转换电压30v,而不是实现了全部的接口。不同的对象可以根据需求实现对应的接口进行适配。这就是对象适配器模式。

总结


参考:

https://blog.csdn.net/weixin_44198475/article/details/106630392
日拱一卒,功不唐捐,如有错误,恳请大家批评指证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值