歡迎您光臨本站 註冊首頁

適配器(adapter)模式

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  適配器模式的宗旨是:保留現有類提供的服務,向客戶提供介面,是的原本介面不兼容而功能相同的類一起工作.客戶提供介面讓實現一些個功能,而我們已經有類實現了相同的功能,但是兩者的介面是不兼容的.現在可以實現一個新的類,利用已有類的功能去實現客戶所希望的功能.

  分為類適配與對象適配.

  類適配:新的類繼承已有類而實現期望的介面:

  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)

  基本功很重要啊,看來還得繼續好好看thinking in java.


[火星人 ] 適配器(adapter)模式已經有168次圍觀

http://coctec.com/docs/java/show-post-60381.html