IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 结构型设计模式之适配器模式 -> 正文阅读

[Java知识库]结构型设计模式之适配器模式


前言

之前的文章主要研究了设计模式中的创建型设计模式,创建型设计模式主要包括工厂方法模式,抽象工厂模式,建造者模式,单例模式和原型模式。
从这篇文章开始继续研究设计模式中的结构型模式,顾名思义,结构型模式就是用来设计程序的结构的。结构型模式包括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
日拱一卒,功不唐捐,如有错误,恳请大家批评指证

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 15:48:10  更:2021-12-14 15:50:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:36:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码