23種經典設計模式的java實現_2_適配器模式

來源:互聯網
上載者:User

適配器模式的適用:

你想使用一個已經存在的類,而它的介面不符合你的需求。

你想建立一個可以複用的類,該類可以與其他不相關的類或不可預見的類(即那些介面可能不一定相容的類)協同工作。

你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的介面,那麼對象適配器可以適配它的父類介面(僅適用於對象Adapter)。

樣本說明:

這個例子類比了對一個特定組織系統——OrganizationAdaptee的適配。適配器OrganizationAdapter實現了適配介面IOrganization,從而使得用戶端系統可以通過自己的介面IOrganization使用此組織系統——OrganizationAdaptee,而不需要耦合它的API。

package com.alex.designpattern.adapter;

import java.util.HashMap;
import java.util.Map;

/** *//**
 * 適配器模式
 * <p>
 * 將一個類的介面轉換成客戶希望的另外一個介面。 <br>
 * Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
 * 
 * @author <a href="mailto:huqiyes@gmail.com">huqi</a>
 * @serialData 2007
 */
public class Test ...{

    public static void main(String[] args) ...{
        Test test = new Test();
        IOrganization org = new OrganizationAdapter();
        String result = test.genericClientCode(org);
        System.out.println("Using client, get result: " + result);
    }

    private String genericClientCode(IOrganization org) ...{
        // We assume this function contains client-side code that only
        // knows about IOrganization.
        return org.getRole(4);
        // other calls to IOrganization go here
        // ...
    }

}

interface IOrganization ...{
    public String getRole(int id);
}

class OrganizationAdaptee ...{
    public Map<String, String> queryRole(String id) ...{
        System.out.println("Query a Role in the Adaptee Organization, id: "
                + id);
        // query using id ... get result
        Map<String, String> map = new HashMap<String, String>();
        map.put("id", id);
        map.put("name", "huqi");
        map.put("type", "human");
        return map;
    }
}

class OrganizationAdapter implements IOrganization ...{
    private OrganizationAdaptee adaptee = new OrganizationAdaptee();

    public String getRole(int id) ...{
        Map result = adaptee.queryRole(String.valueOf(id));
        return result.get("id") + ", " + result.get("type") + ", "
                + result.get("name");
    }
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.