1. 程式人生 > >Java面試題設計模式篇介面卡模式

Java面試題設計模式篇介面卡模式

目的

介面卡模式為了把不符合的介面實現,轉換為呼叫方期待的介面。

類圖

實戰案例

比如我的專案中,原來的一部分業務資料查詢的是資料庫,現在需要改為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等方法,還需要進行物件的轉換操作。