设计模式(7)-适配器模式(Adapter)

来源:互联网 发布:怎样查农村淘宝服务站 编辑:程序博客网 时间:2024/06/05 08:37

如果一种产品需要使用另一种产品,而又由于不匹配不能直接使用,就可以用一个适配器进行适配。
比如一个电脑的键盘圆口坏了,原来的键盘还想使用,就用一个圆口和USB的转接头,把原来的键盘接到USB口上。这就是一种适配。
网卡叫适配器也有这个意思,将网络数据和计算机数据进行相互转换。

如果一个类要使用另一个类,而要求的接口又不一样,就可以在两个类之间加个适配器。下面是jdbc调用odbc的例子模拟


ODBC调用oracle:ODBC

package org.bluebea.gof.adapter;

import java.util.List;

/**
 * odbc对oracledriver的调用,也要用适配器。这为了简化操作,直接写。
 */
public class ODBC {

    OracleDriver od = new OracleDriver();

    public ODBC() {
    }

    private void createor() {
        if (null == od) {
            od = new OracleDriver();
        }
    }

    public void odbc_save() {
        this.createor();
        od.oracle_save();
    }

    public OdbcList odbc_find() {
        OdbcList olist = new OdbcList();
        this.createor();
        olist.setList(od.oracle_find());
        return olist;
    }

}

JDBC接口:JDBC

package org.bluebea.gof.adapter;

import java.util.List;

public interface JDBC {

    public void save();

    public List find();

}

适配器:JdbcOdbcAdapter

package org.bluebea.gof.adapter;

import java.util.List;

public class JdbcOdbcAdapter implements JDBC {

    ODBC odbc = null;

    public JdbcOdbcAdapter() {
        this.createor();
    }

    private void createor() {
        if (null == odbc) {
            odbc = new ODBC();
        }
    }

    public void save() {
        odbc.odbc_save();
    }

    //这儿进行适配
    public List find() {
        return odbc.odbc_find().getList();
    }

}

JDBC实现:JDBCDriver

package org.bluebea.gof.adapter;

import java.util.List;

public class JDBCDriver implements JDBC {


    public JDBCDriver() {
    }

    public void save() {
        JdbcOdbcAdapter joa = new JdbcOdbcAdapter();
        joa.save();
    }

    public List find() {
        JdbcOdbcAdapter joa = new JdbcOdbcAdapter();
        return joa.find();
    }

}

说明:因为ODBC返回的类型不符合JDBC接口的需要,所以加了个适配器来达到调用ODBC的目的。这只是个例子。实际情况要复杂多。 

原创粉丝点击