青岛建站公司流程,上海网站建设价钱,建设一个网站的费用构成,wordpress探针适配器模式#xff08;Adapter Pattern#xff09;属于结构型模式 概述
结构型模式关注如何将现有的类或对象组织在一起形成更加强大的结构。
在生活中#xff0c;我们经常遇到这样的一个问题#xff1a;轻薄笔记本通常只有 type-c 或者 usb-a 接口#xff0c;没有网口。… 适配器模式Adapter Pattern属于结构型模式 概述
结构型模式关注如何将现有的类或对象组织在一起形成更加强大的结构。
在生活中我们经常遇到这样的一个问题轻薄笔记本通常只有 type-c 或者 usb-a 接口没有网口。但日常使用中是往往需要连接网口上网的这时想到的第一个解决方案就是去买一个转接头或者扩展坞。它们可以将 type-c 或者 usb-a 转换为其他类型的接口供我们使用实际上这就是一种适配器模式。
我们常用的充电头为什么叫电源适配器呢传统的供电是 220V 交流电但是手机可能只需要 5V 的电压进行充电所以虽然现在有电但是不能直接充。也不可能让电力公司专门为我们提供一个 5V 的直流电使用这时电源适配器就开始发挥作用了。比如苹果的祖传 5V1A 充电头实际上就是将 220V 交流电转换为 5V 的直流电进行传输。这样就相当于在 220V 交流电和手机之间做了一个适配器的角色。
适配器模式分为类适配器和对象适配器。
代码实现
这里以电脑需要转接器连接网线上网为例
类适配器
1、定义电脑
/*** 电脑* p想上网需要插网线*/
public class Computer {/*** 电脑需要连接上转换器才可以上网** param adapter 转接器*/public void connect(NetToUsb adapter) {// 上网的具体实现找一个转接头adapter.connectNetLine();}
}2、定义网线
/*** 网线*/
public class NetLine {/*** 上网*/public void online(){System.out.println(连接网线上网);}
}3、定义 usb 转网口转接器
/*** 转接器*/
public interface NetToUsb {/*** 处理请求usb - 网线*/void connectNetLine();
}4、定义类适配器
/*** 类适配器*/
public class ClassAdapter extends NetLine implements NetToUsb {Overridepublic void connectNetLine() {// 可以上网了super.online();}
}5、使用适配器连接网线上网
// 电脑
Computer computer new Computer();
// 转接器已经插上网线
ClassAdapter adapter new ClassAdapter();
// 电脑连接转接器成功上网
computer.connect(adapter);这种实现方式需要占用一个继承位。如果此时 NetToUsb 不是接口而是抽象类的话由于 Java 不支持多继承就无法实现了。同时根据合成复用原则应该更多的通过合成的方式去实现功能。
所以来看看第二种也是用的比较多的一种模式对象适配器。
对象适配器
4、定义对象适配器
/*** 对象适配器*/
public class ObjectAdapter implements NetToUsb {/*** 网线*/private NetLine netLine;public ObjectAdapter(NetLine netLine) {this.netLine netLine;}Overridepublic void connectNetLine() {// 可以上网了netLine.online();}
}5、使用适配器连接网线上网
/*** 测试示例*/
public class ObjectAdapterTest {Testpublic void test() {// 电脑Computer computer new Computer();// 网线NetLine netLine new NetLine();// 转接器插上网线ObjectAdapter adapter new ObjectAdapter(netLine);// 电脑连接转接器成功上网computer.connect(adapter);}}这样的方式不会占用继承位且满足合成复用原则耦合度更低也更加灵活推荐使用。
优缺点 优点 1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。 缺点 1、过多地使用适配器会让系统非常零乱不易整体进行把握。比如明明看到调用的是 A 接口其实内部被适配成了 B 接口的实现一个系统如果太多出现这种情况无异于一场灾难。因此如果不是很有必要可以不使用适配器而是直接对系统进行重构。
2、由于 Java 至多继承一个类所以至多只能适配一个类而且目标类必须是抽象类。
使用场景
有动机地修改一个正常运行的系统的接口这时应该考虑使用适配器模式。
注意事项
适配器不是在详细设计时添加的而是解决正在服役的项目的问题。 参考 https://www.bilibili.com/video/BV1mc411h719?p7vd_source299f4bc123b19e7d6f66fefd8f124a03