適配器模式【結構模式】
阿新 • • 發佈:2018-12-23
ets assert exce apt all otherwise final 環境 無法
適配器模式
Convert the interface of a class into another interface clients except.
Adapter lets classes work together that couldn‘t otherwise because of incompatible interfaces.
將一個類的接口轉換為另一個客戶端所期望的接口。
適配器允許由於接口不兼容而無法一起工作的兩個類可以協同工作。
public class Adapter { /** * 適配器模式: * Convert the interface of a class into another interface clients except. * Adapter lets classes work together that couldn‘t otherwise because of incompatible interfaces. * 將一個類的接口轉換為另一個客戶端所期望的接口。 * 適配器允許由於接口不兼容而無法一起工作的兩個類可以協同工作。 */ @Test public void all() { // 需要適配的舊接口實現 final OldPhone oldPhone = new OldPhone(); final String phone = oldPhone.getPhones().get(PhoneType.SELF); // 適配新舊接口的適配器 final PhoneAdapter adapter = PhoneAdapter.builder().phone(oldPhone).build(); // 工作在新接口環境下 final String selfPhone = adapter.getSelfPhone(); assertEquals(phone, selfPhone); } } enum PhoneType { SELF, WORK; } /** * 1)需要適配的目標接口 */ interface IPhone { Map<PhoneType, String> getPhones(); } /** * 2)舊接口的具體實現 */ class OldPhone implements IPhone { private final Map<PhoneType, String> phones = Map.of(PhoneType.SELF, "666", PhoneType.WORK, "123"); @Override public Map<PhoneType, String> getPhones() { return phones; } } /** * 3)客戶端期望的接口規範 */ interface PhoneSRP { String getSelfPhone(); String getWorkPhone(); } /** * 4)將舊接口適配為客戶端期望接口的適配器,適配器持有舊接口的實例 */ @Builder class PhoneAdapter implements PhoneSRP { private final IPhone phone; @Override public String getSelfPhone() { return phone.getPhones().get(PhoneType.SELF); } @Override public String getWorkPhone() { return phone.getPhones().get(PhoneType.WORK); } }
適配器模式【結構模式】