Java最优良的Adapter模式:适配器模式

简介:

网上关于JAVA的适配器模式例子有很多,但真的有少实在不怎么样,看也不懂。自己总结了一个在性能和结构上都很容易理解的Adapter模式。

  Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。Adapter模式是构造型模式之一,通过Adapter模式,可以改变已有类(或外部类)的接口形式。

  在大规模的系统开发过程中,我们常常碰到诸如以下这些情况:

  我们需要实现某些功能,这些功能已有还不太成熟的一个或多个外部组件,如果我们自己重新开发这些功能会花费大量时间;所以很多情况下会选择先暂时使用外部组件,以后再考虑随时替换。但这样一来,会带来一个问题,随着对外部组件库的替换,可能需要对引用该外部组件的源代码进行大面积的修改,因此也极可能引入新的问题等等。如何最大限度的降低修改面呢?

  Adapter模式就是针对这种类似需求而提出来的。

  Adapter模式通过定义一个新的接口(对要实现的功能加以抽象),和一个实现该接口的Adapter(适配器)类来透明地调用外部组件。这样替换外部组件时,最多只要修改几个Adapter类就可以了,其他源代码都不会受到影响。

  实现Adapter模式的2种方法与范例

  Adapter模式通过在Adapter类中调用外部组件来实现功能。

  根据调用方式的不同,Adapter模式有2种实现方法:

  1、通过继承实现Adapter

  2、通过委让实现Adapter

  为了能更清楚地说明2种实现方法的区别,我们举例说明:

  比如,我们需要实现一个发送邮件的功能,需要用到一个名为OutMailer的外部组件,因为上述原因,我们决定用Adapter模式实现对OutMailer的透明调用。

  首先,我们把邮件发送的功能抽象成一个接口:

  1. IMailer.java  
  2. interface IMailer {  
  3.     //发送邮件 
  4.     publicvoid sendMail();  
  5. }

  然后定一个实现IMailer接口的MailerAdapter类。

  下面我们来看看MailerAdapter的实现方法。

  通过继承实现Adapter

  MailerAdapter.java

  1. class MailerAdapter extends OutMailerimplements IMailer {  
  2.     //发送邮件 
  3.     publicvoid sendMail() {  
  4.         //调用OutMailer.sendMail()方法实现邮件发送 
  5.         this.sendMail();  
  6.     }  
  7.     //这里省略其他方法 
  8. }

  通过委让实现Adapter

  MailerAdapter.java

  1. class MailerAdapter implements IMailer {  
  2.     private OutMailer outMailer =new OutMailer();  
  3.     //发送邮件 
  4.     publicvoid sendMail() {  
  5.         //调用OutMailer.sendMail()方法实现邮件发送 
  6.         outMailer.sendMail();  
  7.     }  
  8.     //这里省略其他方法 
  9. }

  不管是通过继承实现Adapter,还是通过委让实现Adapter,调用方MailerClient的调用方法完全一样,如下:

  MailerClient.java

  1. IMailer mailer =new MailerAdapter();  
  2. ...  
  3. mailer.sendMail();

  我们可以看到,这里完全没有直接调用OutMailer,也就是说OutMailer即使被替换了,我们也不用对MailerClient做任何修改。








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
3月前
|
设计模式 Java 程序员
Java设计模式-适配器模式(8)
Java设计模式-适配器模式(8)
|
3月前
|
存储 Java 开发者
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
74 11
|
2月前
|
设计模式 Java
Java设计模式之适配器模式
这篇文章详细讲解了Java设计模式中的适配器模式,包括其应用场景、实现方式及代码示例。
57 0
|
3月前
|
设计模式 Java
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
|
4月前
|
消息中间件 Java
【实战揭秘】如何运用Java发布-订阅模式,打造高效响应式天气预报App?
【8月更文挑战第30天】发布-订阅模式是一种消息通信模型,发送者将消息发布到公共队列,接收者自行订阅并处理。此模式降低了对象间的耦合度,使系统更灵活、可扩展。例如,在天气预报应用中,`WeatherEventPublisher` 类作为发布者收集天气数据并通知订阅者(如 `TemperatureDisplay` 和 `HumidityDisplay`),实现组件间的解耦和动态更新。这种方式适用于事件驱动的应用,提高了系统的扩展性和可维护性。
81 2
|
4月前
|
设计模式 XML 存储
【六】设计模式~~~结构型模式~~~适配器模式(Java)
文章详细介绍了适配器模式(Adapter Pattern),这是一种结构型设计模式,用于将一个类的接口转换成客户期望的另一个接口,使原本不兼容的接口能够一起工作,提高了类的复用性和系统的灵活性。通过对象适配器和类适配器两种实现方式,展示了适配器模式的代码应用,并讨论了其优点、缺点以及适用场景。
|
4月前
|
设计模式 XML 存储
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
文章详细介绍了工厂方法模式(Factory Method Pattern),这是一种创建型设计模式,用于将对象的创建过程委托给多个工厂子类中的某一个,以实现对象创建的封装和扩展性。文章通过日志记录器的实例,展示了工厂方法模式的结构、角色、时序图、代码实现、优点、缺点以及适用环境,并探讨了如何通过配置文件和Java反射机制实现工厂的动态创建。
【二】设计模式~~~创建型模式~~~工厂方法模式(Java)
|
3月前
|
JSON Java UED
uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现
以上展示了使用Java结合DCloud的uni-push进行在线消息推送的基本步骤和实现方法。实际部署时,可能需要依据实际项目的规模,业务场景及用户基数进行必要的调整和优化,确保消息推送机制在保证用户体验的同时也满足业务需求。
242 0
|
Java 设计模式
亲身实践,JAVA最优良的Adapter模式--适配器模式
网上关于JAVA的适配器模式例子有很多,但真的有少实在不怎么样,看也不懂。自己总结了一个在性能和结构上都很容易理解的Adapter模式。 Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。
906 0
|
1天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
11 3