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等方法,还需要进行对象的转换操作。

猜你喜欢

转载自blog.csdn.net/hanruikai/article/details/82419669