适配器模式+实列讲解

简述

适配器模式,说的就是不改变原有类的情况下,重新建立一个类,这个类当中既承载了上一个类的方法,又可以对自己类的新方法进行设置,适配器当中包含了三个角色,分别是Source(待适配的类),Targetable(目标接口),Adapter(适配器),我们重点要下文章的地方就是这个适配器。

书面例子

首先建立一个待适配器

import java.util.logging.Logger;

public class Source {
    private  final  static Log logger=LogFactory.getLog(Source.class);
    public void enitTextFile(){
        Logger.info("a text file ending");
    }
}

假如现在这个待适配器需要拥有适配器来完成更多的一些功能,那么就可以再更新接口当中的方法:

public interface Targetable {
    void editTextFile();
    void editWordFile();
}

紧接着我们继续将这个适配器进行书写:

public class Adapter extends Source implements  Targetable{
    private final  static Log logger=LogFactory.getLog(Adapter.class);
    public void editWordFile(){
        logger.info("a word file editing");
    }

    public static void main(String[] args) {
        Targetable target=new Adapter();
        target.editTextFile();
        target.editWordFile();
    }
}

实际例子

其实上面的例子只是一个大众化的例子,假如你去过国外旅行的话,那么理解起来适配器就会并不觉得复杂,甚至还觉得它是多么地贴近生活呢
首先我们可以了解一下国外地插头和我们中国的插头是不一样的,他们需要圆孔来插,那么这个时候就需要改变我们的充电器了,而不是去改变人家的插座,毕竟人家不可能因为中国的游客过去就轻易地改变。
那么如何将带有中国的充电器进行充电呢,这个时候就需要用到适配器了,上面连接的是中国的充电器,再将其下端插入到对应的国外插座上面去,之后就可以进行一个充电了。
那么步骤就来了
首先建立国外的接口以及其对应的方法:

public interface GWSocketInterface {
    void powerGW();
}

再定义一个国外的充电器,这个充电器也是圆孔的,插上之后就会显示使用圆孔进行充电

public class GWSocket implements GWSocketInterface{


    @Override
    public void powerGW() {
        System.out.println("使用圆孔进行充电");
    }
}

再接下来我们就需要定义一个酒店来对这个插座进行包含啦

public class Hotel {
    //旅馆中有一个国外的插口
    private GWSocketInterface gwSocketInterface;
    public  Hotel(){
    }
    public Hotel(GWSocketInterface gwSocketInterface){
        this.gwSocketInterface=gwSocketInterface;
    }

    public void setGwSocketInterface(GWSocketInterface gwSocketInterface){
        this.gwSocketInterface=gwSocketInterface;
    }
    //旅馆中有一个充电的功能
    public void charge(){
        //使用德标插口充电
        gwSocketInterface.powerGW();
    }
}

对应的测试结果如图所示:
在这里插入图片描述
接下来就是我现在用的是国内的三孔插头和充电器,那么我现在要去国外旅行,就需要用到适配器来完成对于手机的充电,那么这个时候我先去准备两样东西,分别是中国接口和中国插座实现中国接口。可以认为这两个东西是我将要待到国外去的,但是现在还不能实现,就需要用到适配器来完成

首先是来定义国内的插座

public class GBSocket implements  GBSocketInterface{
    @Override
    public void powerGB() {
        System.out.println("使用三项扁头插孔充电");
    }
}

然后是接口:

public interface GBSocketInterface {
    void powerGB();
}

接下来就是构造一个适配器了:

public class SocketAdapter implements GWSocketInterface{
    //组合新接口,这个接口在适配器的上方
    private GBSocketInterface gbSocketInterface;
    public  SocketAdapter(){

    }
    public SocketAdapter(GBSocketInterface gbSocketInterface){
        this.gbSocketInterface=gbSocketInterface;
    }

    //将对接接口的调用适配到新接口
    public void powerGW(){
        gbSocketInterface.powerGB();
    }
}

接下来就是测试适配器的使用过程

public class TestAdapter {
    public static void main(String[] args) {
        GBSocketInterface gbSocketInterface=new GBSocket();
        Hotel hotel=new Hotel();
        SocketAdapter socketAdapter=new SocketAdapter(gbSocketInterface);
        hotel.setGwSocketInterface(socketAdapter);
        hotel.charge();
    }
}

它是先把国内的给连接上去,再接上国外的
结果如下图所示
在这里插入图片描述
适配器模式的三个特点
1.适配器对象实现原有接口
2.适配器对象组合一个实现新接口的对象(这个对象也可以不实现接口,只是一个单纯的对象)
3.对适配器原有方法的调用被委托给新接口的实列的特定方法

好了,这一期的文章就结束啦,我是明怀,一个在互联网苟且偷生的程序猿,你知道的越多,你不知道的就越多,我们下期见!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值