前言
實現目標,組合源,寫個適配方法,適用于沒辦法改變源,但又想實現目標類。我暫時還沒使用到過,但感覺用處還是蠻大的
UML類圖
代碼示例
package com.sw.learn.pattern.C_structre.a_adapter;public class Main {// 目標5v,接口表示提供了獲取5v的能力interface FiveVolt {int get5Volt();}// 源(被適配類),繼承表示提供獲取220v的能力static class PowerSource220V {public int get220Volt() {return 220;}}// 源2(被適配類),繼承表示提供獲取110v的能力static class PowerSource110V {public int get110Volt() {return 110;}}// Adapter適配器: 充電器,把 220V 轉為 5Vstatic class VoltageAdapter extends PowerSource220V implements FiveVolt {@Overridepublic int get5Volt() {int original = this.get220Volt();return original / 44; // 簡化模擬變壓過程}}// Adapter適配器: 充電器,把 110V 轉為 5Vstatic class VoltageAdapter2 implements FiveVolt {private PowerSource110V powerSource110V;// 組合代替繼承public VoltageAdapter2() {this.powerSource110V = new PowerSource110V();}@Overridepublic int get5Volt() {int original = powerSource110V.get110Volt();return original / 22; // 簡化模擬變壓過程}}// Client: 手機static class Phone {public void charge(FiveVolt power) {System.out.println("正在使用 " + power.get5Volt() + "V 電壓充電");}}public static void main(String[] args) {Phone phone = new Phone();FiveVolt adapter = new VoltageAdapter();phone.charge(adapter);FiveVolt adapter2 = new VoltageAdapter2();phone.charge(adapter2);}
}