設計模式-結構型- 適配器模式(Adapter)

定義

將一個類的接口轉換成客戶希望的另一個接口

角色

目標接口(Target):定義客戶端使用的與特定領域相關的接口

需要適配的類(Adaptee):定義一個已經存在的接口,這個接口需要適配

適配器(Adapter):對Adaptee的接口與Target接口進行適配

優點

  • 客戶端可以調用同一接口,因而對客戶端來說是透明的, 這樣做更簡單、更直接、更緊湊
  • 複用了現存的類
  • 通過引入一個適配器重用現有的Adaptee類,將目標類與Adaptee類解耦

缺點

  • 更換適配器的實現過程比較複雜

適用場景

  • 想使用一個已經存在的類, 但它的接口不符合你的需求
  • 想創建一個可以複用的類,該類可以與其它不相關的類協同工作
  • 兩個類所做的事情相似,但是具有不同接口時

類圖

Adapter

package com.vapy.structure.Adapter;
/**
 *
 * @author vapy 2016年8月28日
 *
 */
public interface Target {
    void adapteeMethod();

    void adapterMethod();
}
package com.vapy.structure.Adapter;
/**
 *
 * @author vapy 2016年8月28日
 *
 */
public class Adaptee {
    public void adapteeMethod() {
        System.out.println("Adaptee method");
    }
}
package com.vapy.structure.Adapter;
/**
 *
 * @author vapy 2016年8月28日
 *
 */
public class Adapter implements Target {
    private Adaptee adaptee;

    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void adapteeMethod() {
        adaptee.adapteeMethod();
    }

    @Override
    public void adapterMethod() {
        System.out.println("Adapter method");
    }

}
package com.vapy.structure.Adapter;
/**
 *
 * @author vapy 2016年8月28日
 *
 */
public class Client {
    public static void main(String[] args) {
        Target target = new Adapter(new Adaptee());
        target.adapteeMethod();
        target.adapterMethod();
    }
}

AdapterResult
本文代碼可在github查看:點擊此處

發佈了55 篇原創文章 · 獲贊 29 · 訪問量 123萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章