您现在的位置是:亿华云 > 域名
巧妙的运用适配器模式,让你的工作量至少减轻一半
亿华云2025-10-03 15:57:56【域名】3人已围观
简介本文转载自微信公众号「Java极客技术」,作者鸭血粉丝。转载本文请联系Java极客技术公众号。今天我们就一起来聊聊使用超广的适配器模式!一、介绍适配器模式,顾名思义,就是将一个类的接口转换成客户希望的
本文转载自微信公众号「Java极客技术」,巧妙轻半作者鸭血粉丝。用适转载本文请联系Java极客技术公众号。配器
今天我们就一起来聊聊使用超广的模式适配器模式!
一、介绍
适配器模式,工作顾名思义,量至就是少减将一个类的接口转换成客户希望的另一个接口,使接口不兼容的巧妙轻半类可以一起工作,也被称为包装器模式(Wrapper)。用适
在适配器模式中,配器通常通过增加一个新的模式适配器类来解决接口不兼容的问题,使得原本没有任何关系的工作类可以协同工作。
从设计的量至角度看,适配器模式涉及到三个角色:
适配器类:适配器类可以调用另一个接口,少减从而实现接口的巧妙轻半转换; 被适配类:被适配类定义了一个已经存在的接口,这个接口需要适配; 客户角色:客户类提出使用具体类的请求;二、示例
在 java 中,适配器模式有两种,类适配器和对象适配器,下面我们一起来看看!
2.1、类适配模式
首先,我们创建一个接口Phone,服务器租用接口的实现类为HuaweiPhone!
public interface Phone { void productPhone(); } public class HuaweiPhone implements Phone { @Override public void productPhone() { System.out.println("生产一部华为手机"); } }在创建另一个接口Player,如果Player的实现类想调用HuaweiPhone中的productPhone方法,该怎么办呢?
最简单的方法,就是将productPhone的方式逻辑抄一遍,但是这种方法显然不高效!
可以通过创建一个适配器ExpensiveAdapter,使之继承HuaweiPhone,来解决接口转换的问题,如下:
public class ExpensiveAdapter extends HuaweiPhone implements Player { @Override public void action() { //调用HuaweiPhone中的productPhone方法 productPhone(); System.out.println("用手机播放音乐"); } }测试类如下:
public class AdapterClient { public static void main(String[] args) { ExpensiveAdapter adapter = new ExpensiveAdapter(); adapter.action(); } }即可实现接口的转换!
但是这种方法,也有很大的局限性,假如Phone接口的实现类有多个呢?
我们知道,类是无法多继承的,对象适配模式就派上用场了!
2.2、对象适配模式
同样的,我们可以对ExpensiveAdapter类进行一定的优化,如下:
public class ExpensiveAdapter implements Player { private Phone phone; public ExpensiveAdapter(Phone phone) { this.phone = phone; } @Override public void action() { //调用Phone接口中的productPhone方法 phone.productPhone(); System.out.println("用手机播放音乐"); } }测试客户端如下:
public class PlayerClient { public static void main(String[] args) { //对象适配 ExpensiveAdapter adapter = new ExpensiveAdapter(new HuaweiPhone()); adapter.action(); } }相比类适配模式,云服务器有木有发现对象适配模式更加灵活~
三、应用
在 jdk 中,适配器设计模式应用也非常广泛,例如我们熟悉的io包,其中字节流转字符流,就使用到了适配器模式!
其中,最广泛的莫过于Spring中的ioc对象依赖关系,在类A中,通过引入另一个类B 对象,就可以调用类 B 中的方法了,从而实现方法的协同工作!
四、总结
适配器模式,可以让任何两个没有关联的类一起运行,提高了类的复用;例如,现在非常流行的Mybatis-plus持久框架,里面的Service层就是典型的类适配模式,在Service层可以很方便的进行crud调用,开发人员基本不需编写crud的代码,开发效率大大提升!
但是,香港云服务器设计时如果过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是另一个接口,反而另一个接口又回调了自身,一个系统如果太多出现这种情况,无异于一场灾难。
因此在设计使用的时候,尽可能层次分明,接口名包括方法名,取名的时候应该规范化定义!
五、参考
1、菜鸟教程 - 适配器模式
2、简书 - 键盘上的麒麟臂 - 浅谈Java适配器模式
很赞哦!(77544)