適配器模式的宗旨是保留現有類提供的服務向客戶提供接口使得原本接口不兼容而功能相同的類一起工作客戶提供接口讓實現一些個功能而我們已經有類實現了相同的功能但是兩者的接口是不兼容的現在可以實現一個新的類利用已有類的功能去實現客戶所希望的功能
分為類適配與對象適配
類適配新的類繼承已有類而實現期望的接口
class NewClass extends SomeClass implements interface{};
對象適配新類繼承客戶所期望的類而在內部組合已有的類也就是將已有類作為自己的屬性利用已有類的方法實現所繼承下來的方法
class NewClass extends ClientClass {
SomeClass someClass;
public void ClientMethod() {
someClasssomeMethod();
}
}
忽然想起前不久看到的組合與繼承類適配用到了繼承的方法而對象適配呢用到了組合的方法為什麼對象適配不能用繼承了因為它已繼承了ClientClass類java不支持多重繼承所以不能再繼承現有的類那麼直接都用類適配就行了嘛考慮這樣的情況你需要用到很多(多於一個就行)現有類來實現功能而這個時候是不能用繼承的可以將所有的這些類組合進新類裡面來完成任務
對象適配的一個應用JTable需要實現自己的表格模型時有一個TableModel接口而通常是繼承其下的一個AbstractTableModel類實現自己的表格模型類需要提供getColumnCount()getRowCount()getValueAt(int int)方法可以利用現有的一些類如存儲從數據庫查詢的記錄的ResultSet利用ResultSet的方法實現這三個方法
class MyTableModel extends AbstractTableModel {
private Result rs;
public int getColumnCount() {
thod();
}
getRowCount()getValueAt(int int)
}
參考java設計模式(adapter)java編程思想(組合繼承)java核心技術(swing table)
基本功很重要啊看來還得繼續好好看thinking in java
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27456.html