Java面試題設計模式篇介面卡模式
阿新 • • 發佈:2018-12-31
目的
介面卡模式為了把不符合的介面實現,轉換為呼叫方期待的介面。
類圖
實戰案例
比如我的專案中,原來的一部分業務資料查詢的是資料庫,現在需要改為Hsqldb查詢。原來的程式碼結構如下:
程式碼
原來的資料操作介面DbDao:
package com.puhui.goosecard.web;
/**
* 2 * @Author: kerry
* 3 * @Date: 2018/9/5 11:22
* 4
*/
public interface DbDao {
void insertDb();
}
原來的資料庫介面實現類DbDaoImpl:
package com.puhui.goosecard.web; /** * 2 * @Author: kerry * 3 * @Date: 2018/9/5 11:22 * 4 */ public class DbDaoImpl implements DbDao { @Override public void insertDb() { } }
新採用的hsqldb操作介面:
package com.puhui.goosecard.web;
/**
* 2 * @Author: kerry
* 3 * @Date: 2018/9/5 11:37
* 4
*/
public interface HsqlDao {
void insertHsql();
}
新採用的hsqldb介面實現類:
package com.puhui.goosecard.web; /** * 2 * @Author: kerry * 3 * @Date: 2018/9/5 11:25 * 4 */ public class HsqlDaoImpl implements HsqlDao{ @Override public void insertHsql() { } }
呼叫方:
package com.puhui.goosecard.web;
/**
* 2 * @Author: kerry
* 3 * @Date: 2018/9/5 11:28
* 4
*/
public class Client {
//如果改為hsql,呼叫方需要修改介面,為了不影響,我們採用介面卡模式,讓hsqldao實現dbdao介面
private DbDao dbDao;
}
關鍵點:
- 為了採用hsqldbdao實現類,並且不影響原來的呼叫,必需實現DbDao介面。
- 實現DbDao介面後,通過物件組合引用,呼叫hsqldb的邏輯。這個部分和代理模式有些類似,但是代理模式並沒有實現新的介面。
- 例項程式碼中只是簡單寫了insert方法,如果是query等方法,還需要進行物件的轉換操作。