如果一种产品需要使用另一种产品,而又由于不匹配不能直接使用,就可以用一个适配器进行适配。
比如一个电脑的键盘圆口坏了,原来的键盘还想使用,就用一个圆口和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的目的。这只是个例子。实际情况要复杂多。