最通俗易懂的设计模式 之 适配器模式

    科技2023-10-13  77

    还是基本的步骤

    首先看下各部分的角色


    文章目录

    还是基本的步骤一、适配器模式角色二、话不多说直接上代码1.转换器抽象类2.网线类3.真正适配器类4.电脑类 三、进阶代码1.转换器抽象类2.为了转换WiFi和网线提取接口3.wifi类和网线类4.实际的适配器类5.电脑类 总结


    一、适配器模式角色

    这里使用的是电脑和网线为例 适配器的作用就是将一个类的接口转换成客户希望的另一个接口。Adapter模式使得由于接口不兼容的那些类可以一起工作。

    目标接口:客户所期待的接口,目标可以是具体的或者抽象的类,也可以是接口。需要适配器的类:需要适配器的类或者适配类适配器:通过包装一个需要适配的对象,把原接口转换成目标对象。

    二、话不多说直接上代码

    1.转换器抽象类

    代码如下(示例):

    //接口转换器抽象类 public interface NetToUsb { //处理请求 网线=》usb public void handlerResquest(); }

    2.网线类

    代码如下(示例):

    public class Adepteree { @Override public void request() { System.out.println("网线上网"); } }

    3.真正适配器类

    //真正的适配器,需要连接usb,连接网线 public class Aderpter extends Adepteree implements NetToUsb { @Override public void handlerResquest() { super.request(); } }

    4.电脑类

    public class Computer { public void net(NetToUsb adepter){ //上网具体实现.找个转接头 adepter.handlerResquest(); } public static void main(String[] args) { Computer computer = new Computer(); Adepteree adepteree = new Adepteree();//网线 Aderpter aderpter = new Aderpter();//适配器 computer.net(aderpter); } }

    你们会发现网线这个类根本没有用直接调用适配器了,根据设计模式的七大原则尽量部要使用继承要多使用组合。 改造下适配器类。

    //真正的适配器,需要连接usb,连接网线 public class Aderpter2 implements NetToUsb { private Adepteree adepteree; public Aderpter2(Adepteree adepteree) { this.adepteree= adepteree; } @Override public void handlerResquest() { netCard.request(); } }

    你也为这就结束了么,上进阶代码。

    三、进阶代码

    1.转换器抽象类

    这步不变:

    //接口转换器抽象类 public interface NetToUsb { //处理请求 网线=》usb public void handlerResquest(); }

    2.为了转换WiFi和网线提取接口

    //上网方式接口 public interface NetWifi { void request(); }

    3.wifi类和网线类

    public class AdepterCard implements NetWifi { @Override public void request() { System.out.println("wifi上网"); } } } public class Adepteree implements NetWifi { @Override public void request() { System.out.println("网线上网"); } }

    4.实际的适配器类


    public class Aderpter2 implements NetToUsb { private NetWifi netWifi; public Aderpter2(NetWifi netWifi) { this.netWifi = netWifi; } @Override public void handlerResquest() { netWifi.request(); } }

    5.电脑类

    public class Computer { public void net(NetToUsb adepter){ //上网具体实现.找个转接头 adepter.handlerResquest(); } public static void main(String[] args) { Computer computer = new Computer(); Adepteree adepteree = new Adepteree();//网线 AdepterCard adepterCard = new AdepterCard();//网线 // Aderpter aderpter = new Aderpter();//适配器 Aderpter2 aderpter2 = new Aderpter2(adepterCard);//适配器 computer.net(aderpter2); } }

    总结

    适配器的优缺点:

    Processed: 0.013, SQL: 8