在日常生活中出國常需要電壓轉接頭,接電壓轉換為另外一種該國家可用的電壓規格。今天要介紹的配置器就是有這樣的作用,可以將兩個不同的系統藉由配置器去符合其他系統的標準。
配接器模式定義
將兩個不同模組介面,利用配接器可以結合在一起。
配接器模式使用狀況
1.當兩個系統需要串接時,需要將資料轉換成另一個系統可以使用的規格 2.
配接器模式UML圖
Target: 目標介面,需要轉換資料的目標
Adapter : 配接器角色,負責轉換為目標介面
Adaptee: 需要轉換的角色
配接器模式種類
- Class Adapter(類別配接器): 利用繼承adaptee來完成配接器
- Obejct Adapter(物件配接器): 利用組合物件的方式完成配接器
配接器模式範例
我們建立Adaptee為120電壓,利用Adapter變壓器來轉換電壓。本範例類別與物件配接器都有實作。
GitHub: https://github.com/blackbryant/designpattern/tree/master/java/src/design/adapter
/** * name: Volt.java * description: 電壓物件 * Created by bryant on 2017/1/124 */ public class Volt { private float volt ; public Volt(float volt){ this.volt = volt ; } //取得電壓 public float getV(){ return this.volt ; } }
/** * name: IAdapter.java * description: 變壓器介面 * Created by bryant on 2017/1/24. */ public interface IAdapter { public float convertVolt(float rate) ; }
/** * name: Adaptee.java * description: 傳統變壓器 * Created by bryant on 2017/1/24. */ public class Adaptee { public Volt getVolt(){ return new Volt(120) ; } }
/** * name: Adapter.java * description: 變壓器實作(類別配接器) * Created by bryant on 2017/1/24. */ public class Adapter extends Adaptee implements IAdapter { @Override public float convertVolt( float rate) { return getVolt().getV() * rate ; } }
/** * name: AdapterComposition.java * description: 組合式變壓器 * Created by bryant on 2017/1/24. */ public class AdapterComposition implements IAdapter{ private Adaptee adaptee = new Adaptee(); @Override public float convertVolt(float rate) { return adaptee.getVolt().getV()*rate; } }
/** * name: AdapterDemo.java * description: 變壓器Demo * Created by bryant on 2017/1/24. */ public class AdapterDemo { public static void main(String[] args) { //Class Adapter Adapter adapter = new Adapter(); System.out.println(adapter.convertVolt(0.5f)); //Object Adapter AdapterComposition adapterCompsition = new AdapterComposition() ; System.out.println(adapterCompsition.convertVolt(0.2f)); } }
執行結果 :
60.0
24.0
留言
張貼留言