Java 设计模式 05 适配器模式

本文总结于视频狂神说:狂神说java设计模式

适配器模式核心

当一个类需要使用到另外一个类的方法时,而这两个类之间并没有任何关系,如果一味的使用 new 对象的方式则非常冗余,所以需要一个适配器来拉近两者的关系,例如 B 类持有适配器对象,将 A 对象传入适配器中,让适配器调用 A 的方法。

假如:有一台电脑,网线,电脑和网线的接口不一样,这时候需要一个网线转接口来连接电脑和网线才能正常上网

代码实现:

demo-1 【类适配模式】

类结构图
在这里插入图片描述
定义一个网线类

//网线类
public class NetLine {

    public void linkNet(){
        System.out.println("连接到网络,可以上网!");
    }
}

适配器接口,用于连接电脑和网线

public interface Adapter {

    /*连接网线*/
    void connectNetLine();
}

适配器实现类
这里的适配器实现类继承了网线,有了网线的功能

public class AdaptImpl extends NetLine implements Adapter {
    @Override
    public void connectNetLine() {
        super.linkNet();
    }
}

电脑类
电脑连接网络需要传入一个适配器参数,利用这个适配器去连接网线

//电脑类
public class Computer {

    //给电脑传入一个适配器
    public void toNet(Adapter adapter){
        adapter.connectNetLine();
    }
}

测试:

 public static void main(String[] args) {
        Computer computer = new Computer();
        computer.toNet(new AdaptImpl());
    }

结果
在这里插入图片描述

分析

使用类适配发现,适配器是继承网线的,如果要求该适配器要去适配其他的网线就要重新修改代码,这就带来了局限性

因此引出下面的对象适配器模式

demo-2 【对象适配器模式】

对象适配器使得之前的适配器不再继承任何对象,但是在使用的时候需要有网线的实例。前面的代码结构不变。
只需要修改下适配器实现类,代码如下:

public class AdapterImpl2 implements Adapter {

    private NetLine netLine;

    public AdapterImpl2(NetLine netLine) {
        this.netLine = netLine;
    }

    @Override
    public void connectNetLine() {
        this.netLine.linkNet();
    }
    
}

测试类

 public static void main(String[] args) {
        Computer computer = new Computer();
        //computer.toNet(new AdaptImpl());
        computer.toNet(new AdapterImpl2(new NetLine()));
    }

结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值