Java适配器模式

需求:现有一个电脑只有USB口,想连接网线上网,但没有网线口,这时需要USB转网线的转换器,即适配器
直观理解就是使原来不能一起相互工作(接口不兼容)的两个功能通过Adapter兼容在一起。

适配器类型分为:类适配器(继承关系)对象适配器(组合关系)

类适配器的缺点:对Java, C#等不支持多重类继承的语言,一次只能适配一个适配类,不同同时适配多个

对象适配器的优点:一个对象适配器可以把多个不同的适配者适配到同一个目标

这里有:

电脑
网线
适配器

电脑类代码如下

package com.xianyu.adapter2;

/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/13 20:07
 * 客户端类,想上网,插不上网线
 */
public class Computer {

    public void net(NetToUsb adapter){
        //上网的具体实现,找一个转接头
        adapter.handleRequest();
    }

}

网线类代码如下

package com.xianyu.adapter2;



/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/13 20:06
 * 要被适配的类:网线
 */
public class Adaptee {

    public void request(){
        System.out.println("链接网线上网");
    }

}

适配器的抽象实现

package com.xianyu.adapter2;

/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/13 20:09
 * 接口转化器的抽象实现
 */
public interface NetToUsb {

    // 把网线插到usb上
    public void handleRequest();

}

第一种适配器:继承 类适配器

package com.xianyu.adapter2;

/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/13 20:10
 * 真正的适配器 需要链接USB 链接网线
 * 继承 类适配器
 */
public class Adapter extends Adaptee implements NetToUsb { // 类适配器,继承,只能继承一个

    @Override
    public void handleRequest() {
        super.request();   //可以上网了
    }
}

第二种适配器:组合关系 对象适配器

package com.xianyu.adapter2;

/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/13 20:15
 * 组合关系 对象适配器
 */
public class Adapter2 implements NetToUsb {

    private Adaptee adaptee;  //组合关系

    public Adapter2(Adaptee adaptee){
        this.adaptee = adaptee;
    }


    @Override
    public void handleRequest() {
        adaptee.request();
    }
}



主函数

package com.xianyu.adapter2;

/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/13 20:13
 */
public class Program {

    public static void main(String[] args) {

        // 类适配器
//        Computer computer = new Computer();   // 电脑
//        Adaptee adaptee = new Adaptee();  // 网线
//        Adapter adapter = new Adapter();   // 转接器
//        computer.net(adapter);


        // 对象适配器
        Computer computer = new Computer();   // 电脑
        Adaptee adaptee = new Adaptee();  // 网线
        Adapter2 adapter = new Adapter2(adaptee);   // 转接器
        computer.net(adapter);




    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值