自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java最優(yōu)良的Adapter模式:適配器模式

開發(fā) 架構(gòu) 后端
網(wǎng)上關(guān)于JAVA的適配器模式例子有很多,但真的有少實在不怎么樣,看也不懂。自己總結(jié)了一個在性能和結(jié)構(gòu)上都很容易理解的Adapter模式。

網(wǎng)上關(guān)于JAVA的適配器模式例子有很多,但真的有少實在不怎么樣,看也不懂。自己總結(jié)了一個在性能和結(jié)構(gòu)上都很容易理解的Adapter模式。

Adapter模式也叫適配器模式,是由GoF提出的23種設(shè)計模式的一種。Adapter模式是構(gòu)造型模式之一,通過Adapter模式,可以改變已有類(或外部類)的接口形式。

在大規(guī)模的系統(tǒng)開發(fā)過程中,我們常常碰到諸如以下這些情況:

我們需要實現(xiàn)某些功能,這些功能已有還不太成熟的一個或多個外部組件,如果我們自己重新開發(fā)這些功能會花費大量時間;所以很多情況下會選擇先暫時使用外部組件,以后再考慮隨時替換。但這樣一來,會帶來一個問題,隨著對外部組件庫的替換,可能需要對引用該外部組件的源代碼進行大面積的修改,因此也極可能引入新的問題等等。如何最大限度的降低修改面呢?

Adapter模式就是針對這種類似需求而提出來的。

Adapter模式通過定義一個新的接口(對要實現(xiàn)的功能加以抽象),和一個實現(xiàn)該接口的Adapter(適配器)類來透明地調(diào)用外部組件。這樣替換外部組件時,最多只要修改幾個Adapter類就可以了,其他源代碼都不會受到影響。

實現(xiàn)Adapter模式的2種方法與范例

Adapter模式通過在Adapter類中調(diào)用外部組件來實現(xiàn)功能。

根據(jù)調(diào)用方式的不同,Adapter模式有2種實現(xiàn)方法:

  1. 通過繼承實現(xiàn)Adapter
  2. 通過委讓實現(xiàn)Adapter

為了能更清楚地說明2種實現(xiàn)方法的區(qū)別,我們舉例說明:

比如,我們需要實現(xiàn)一個發(fā)送郵件的功能,需要用到一個名為OutMailer的外部組件,因為上述原因,我們決定用Adapter模式實現(xiàn)對OutMailer的透明調(diào)用。

首先,我們把郵件發(fā)送的功能抽象成一個接口:

  1. IMailer.java  
  2. interface IMailer {  
  3.     //發(fā)送郵件  
  4.     publicvoid sendMail();  

然后定一個實現(xiàn)IMailer接口的MailerAdapter類。

下面我們來看看MailerAdapter的實現(xiàn)方法。

通過繼承實現(xiàn)Adapter

MailerAdapter.java

  1. class MailerAdapter extends OutMailerimplements IMailer {  
  2.     //發(fā)送郵件  
  3.     publicvoid sendMail() {  
  4.         //調(diào)用OutMailer.sendMail()方法實現(xiàn)郵件發(fā)送  
  5.         this.sendMail();  
  6.     }  
  7.  
  8.     //這里省略其他方法  

通過委讓實現(xiàn)Adapter

MailerAdapter.java

  1. class MailerAdapter implements IMailer {  
  2.     private OutMailer outMailer =new OutMailer();  
  3.     //發(fā)送郵件  
  4.     publicvoid sendMail() {  
  5.         //調(diào)用OutMailer.sendMail()方法實現(xiàn)郵件發(fā)送  
  6.         outMailer.sendMail();  
  7.     }  
  8.  
  9.     //這里省略其他方法  

不管是通過繼承實現(xiàn)Adapter,還是通過委讓實現(xiàn)Adapter,調(diào)用方MailerClient的調(diào)用方法完全一樣,如下:

MailerClient.java

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

我們可以看到,這里完全沒有直接調(diào)用OutMailer,也就是說OutMailer即使被替換了,我們也不用對MailerClient做任何修改。

原文鏈接:http://blog.csdn.net/hjm4702192/article/details/7821325

責任編輯:林師授 來源: hjm4702192的博客
相關(guān)推薦

2024-07-31 10:41:16

C#設(shè)計模式

2012-05-16 17:22:11

Java設(shè)計模式

2020-10-25 08:56:21

適配器模式

2013-11-26 16:39:21

Android設(shè)計模式

2021-02-18 08:39:28

設(shè)計模式場景

2022-02-13 23:33:24

設(shè)計模式Java

2022-02-18 17:21:29

適配器模式客戶端

2024-04-10 12:27:43

Python設(shè)計模式開發(fā)

2024-02-22 12:13:49

適配器模式代碼

2009-11-18 18:08:20

PHP適配器模式

2021-02-16 08:16:09

適配器模式MybatisJava

2012-04-12 09:33:02

JavaScript

2013-02-26 10:55:47

C#適配器設(shè)計模式

2022-12-12 09:20:59

適配器模式接口

2014-12-17 09:57:01

AndroidAdapteViewHolder

2022-05-29 22:55:00

適配器設(shè)計模式

2021-08-16 17:15:19

設(shè)計模式Android適配器模式

2023-08-15 11:07:37

適配器模式TypeScript

2023-09-06 13:20:00

適配器模式兼容性

2024-12-09 09:30:00

適配器模式設(shè)計模式代碼
點贊
收藏

51CTO技術(shù)棧公眾號