资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

设计模式之结构型模式:适配器模式-创新互联

前言

前面讲解完了设计模式中的创建性模式,本文开始讲解设计模式中的结构性模式之一:适配器模式。

创新互联企业建站,十多年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于成都网站建设、成都网站设计中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。一、适配器模式的是干什么的?

A类想要使用B类中的某些方法,但是不能直接使用,需要一个中间类对B类进行处理后,A类才能使用,这个中间类就是适配器,这种模式就是适配器模式。示意图如下。
在这里插入图片描述
既A类和B类之间夹了一个适配器类,适配器将B类传入的数据src进行处理,然后输出为A类需要使用的dst传给A类。

按照适配器如何接收B类的方式,将适配器模式分为三种模式,如果适配器类通过继承B类获得B类行为,则称为类适配器模式;如果直接将B类对象聚合到适配器类中,称为对象适配器模式;如果以接口的形式给到适配器类,则称之为接口适配器。

二、适配器模式案例

如我们有一个Voltage220v类只能输出220v的电压,但是现在我们要给手机充电,只能使用5V的电压,那么此时就需要一个适配器类VoltageAdapter首先将220v的电压转为5v,然后再给手机使用。三种适配器模式的实现如下:

1. 类适配器模式实现

在这里插入图片描述

  1. UML图如上所示,VoltageAdapter继承Voltage220v并实现IVoltage5v接口,然后手机再使用VoltageAdapter中输出的5V电压进行充电。
  2. 具体实现代码如下
public class Voltage220v {public int output200v()
    {return 220;
    }
}


public interface IVoltage5v {public int output5v();
}

public class VoltageAdapter extends Voltage220v implements IVoltage5v{@Override
    public int output5v() {int src = output200v();
        int dis = src / 44;
        return dis;
    }
}

public class Phone {public void charging(IVoltage5v iVoltage5v)
    {if (iVoltage5v.output5v() == 5)
        {System.out.printf("可以充电");
        }
        else
        {System.out.printf("不能充电");
        }
    }

}

public class client {public static void main(String[] args) {Phone phone = new Phone();
        IVoltage5v iVoltage5v = new VoltageAdapter();
        phone.charging(iVoltage5v);
    }
}
2. 对象适配器模式实现

在这里插入图片描述

  1. 对象适配器UML图如上所示,与类适配器模式的区别就是对象适配器直接将Voltage220v对象聚合到了VoltageAdapter中,其余和类适配器模式思想一样。
3. 接口适配器模式实现

接口适配器核心思想是通过一个抽象类继承接口,并对所有的接口方法做默认空实现,那么该抽象类的子类就可以有选择的覆盖父类中的某些方法,而不必覆盖全部方法。
在这里插入图片描述

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站题目:设计模式之结构型模式:适配器模式-创新互联
文章URL:http://www.cdkjz.cn/article/igpch.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220