適配器模式(Adapter Pattern)將一個接口轉換成客戶但願的另外一個接口,使接口不兼容的那些類能夠一塊兒工做,其別名爲包裝器(Wrapper)。java
適配器模式既能夠做爲類結構型模式,也能夠做爲對象結構型模式。經常使用做在不修改源代碼的狀況下讓已經存在的類能和其餘類一塊兒使用。app
根據適配器類和適配者類的關係,適配器模式能夠分爲如下兩種:學習
對象適配器模式(組合的方式)this
試想一下,若是咱們不使用適配器模式,咱們能夠選擇修改源碼或者更改咱們的目標接口。而修改源碼或是更改接口很大的代價很大,甚至是咱們根本就沒有源碼。就好像咱們沒法更換插座接口或是充電器的接頭同樣。spa
因爲適配器模式有多種,下面經過幾個代碼片斷來分別學習一下:code
/** * 目標接口 * */ public interface Target { void request(); }
/** * 適配者類 * */ public class Adaptee { /** * 客戶指望使用的業務方法 */ public void specificRequest() { System.out.println("Adaptee Specific request!"); } }
/** * 適配器類(對象適配器模式實現) */ public class Adapter implements Target { // 以組合的方式關聯適配者 private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } public void setAdaptee(Adaptee adaptee) { this.adaptee = adaptee; } /** * 對接口進行轉換 */ public void request() { adaptee.specificRequest(); } }
/** * 類適配器模式 * */ public class AdapterClass extends Adaptee implements Target { public void request() { specificRequest(); } }
public class Main { public static void main(String[] args) { // 對象是配器模式 Adaptee adaptee = new Adaptee(); Target target = new Adapter(adaptee); target.request(); // 類適配器模式 Target target1 = new AdapterClass(); target1.request(); } }