適配器(adapter)模式

適配器模式的宗旨是:保留現有類提供的服務,向客戶提供接口,使得原本接口不兼容而功能相同的類一起工作。客戶提供接口讓實現一些個功能,而我們已經有類實現了相同的功能,但是兩者的接口是不兼容的。現在可以實現一個新的類,利用已有類的功能去實現客戶所希望的功能。
  分爲類適配與對象適配。
  類適配:新的類繼承已有類而實現期望的接口:
  class NewClass extends SomeClass implements interface{};
  對象適配:新類繼承客戶所期望的類,而在內部組合已有的類,也就是將已有類作爲自己的屬性,利用已有類的方法實現所繼承下來的方法。
  class NewClass extends ClientClass {
  SomeClass someClass;
  ...
  public void ClientMethod(...) {
  someClass.someMethod(...);
  ...
  }
  }
  忽然想起前不久看到的組合與繼承。類適配用到了繼承的方法,而對象適配呢用到了組合的方法。爲什麼對象適配不能用繼承了,因爲它已繼承了ClientClass類,java不支持多重繼承,所以不能再繼承現有的類。那麼直接都用類適配就行了嘛,考慮這樣的情況,你需要用到很多(多於一個就行)現有類來實現功能,而這個時候是不能用繼承的,可以將所有的這些類組合進新類裏面來完成任務。
  對象適配的一個應用:JTable。需要實現自己的表格模型時,有一個TableModel接口,而通常是繼承其下的一個AbstractTableModel類。實現自己的表格模型類需要提供getColumnCount(),getRowCount(),getValueAt(int, int)方法,可以利用現有的一些類,如存儲從數據庫查詢的記錄的ResultSet,利用ResultSet的方法實現這三個方法。
  class MyTableModel extends AbstractTableModel {
  private Result rs;
  ...
  public int getColumnCount() {
  ...
  rs.method();
  ...
  }
  ...getRowCount()...getValueAt(int, int)...
  }
  參考:java設計模式(adapter),java編程思想(組合繼承),java核心技術(swing table)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章