(17)在NBA我需要翻译——适配器模式
最后更新于:2022-04-01 14:30:40
### 适配器模式
将一个类的接口转换成用户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(摘抄)
其实适配器模式很简单,就是当你发现你写好了抽象接口和实现类,但是实现的类方法和抽象接口的方法不兼容,这个时候加入一个类实现抽象接口,然后在这个类中实例化实现类,在接口需要调用某种方法时,直接调用实现类里面的方法就可以了,这样解除了不兼容的问题。但是缺点也很明显,如果实现类中的代码不是特别复杂而且这个实现类又和别的没有太大关系时,最好是重新写一个接口的实现类会比较方便和清晰。同时,这也体现了适配器模式的优点,可以增加类的复用,同时在后期维护过程中只需要增加适配器类就可以了。这个是利弊共存的,至于如何取舍这就需要具体情况具体分析了。
~~~
//定义抽象接口
public interface DBTool
{
void query();
void update();
void delete();
void add();
}
//程序里已经有了一个写好的数据库处理类
public class ConcreteDBTool
{
public void q()
{}
public void u()
{}
public void d()
{}
public void a()
{}
}
//已经存在的处理类和接口不兼容,这时就需要一个适配器类
public class DBToolAdapter implements DBTool
{
private ConcreteDBTool concreteDBTool = new ConcreteDBTool();
@Override
public void query() {
// TODO Auto-generated method stub
concreteDBTool.q();
}
@Override
public void update() {
// TODO Auto-generated method stub
concreteDBTool.u();
}
@Override
public void delete() {
// TODO Auto-generated method stub
concreteDBTool.d();
}
@Override
public void add() {
// TODO Auto-generated method stub
concreteDBTool.a();
}
}
//如果客户端现在需要使用已经写好的数据库实现类,那么使用适配器类就可以了
public class Client
{
public static void main()
{
DBTool dbTool = new DBToolAdapter();
//使用的是已经提前写好的实现类里面的方法
dbTool.query();
dbTool.update();
dbTool.delete();
dbTool.add();
}
}
~~~
平时编程的时候有很多类的名字里面都有adapter,估计这些adapter类,就是使用的适配器模式![微笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-18_569ca449c5105.gif)
。(纯属个人猜测)