设计模式——适配器模式

设计模式

适配器模式

基本介绍

适配模式属于结构型设计模式。它通过一个中间件(适配器)将一个类的接口转换成客户期望的另一个接口,使原本不能一起工作的类能够协同工作。

主要解决问题

在软件系统中,需要将现有的对象放入新环境,而新环境要求的接口与现有对象不匹配。

使用场景

1.集成第三方库或框架:当项目中需要集成第三方库或框架,但这些库或框架的接口与现有系统的接口不一致时,可以使用适配器模式进行适配。通过适配器,可以在不修改原有代码的情况下,实现与第三方库或框架的顺利集成。
2.遗留系统升级:在升级或重构遗留系统时,如果新系统需要的接口与旧系统的接口不兼容,可以使用适配器模式来适配旧系统的接口,使得新系统能够继续使用旧系统的功能。
3.替换系统中的组件:如果系统中的某个组件需要被替换为另一个组件,但新组件的接口与旧组件的接口不一致,可以通过适配器模式来适配新组件的接口,使得系统能够无缝地切换到新组件。
4.跨平台数据交互:在不同平台之间进行数据交互时,如果各平台的接口规范不一致,可以使用适配器模式来转换不同平台间的数据格式,实现跨平台的数据共享和交互。
5.实现多个不兼容接口:当一个类需要实现多个不兼容的接口时,可以使用适配器模式来分别实现这些接口,并通过适配器类将不同的接口方法映射到类中的相应方法上。

示例场景

假设我们有一个旧系统,它使用了一个OldDatabase类来与数据库交互。现在,我们需要替换为新的数据库系统,但新系统的接口是NewDatabase,与OldDatabase的接口不一致。我们希望使用适配器模式来适配新数据库接口,使得系统能够继续使用旧代码与新数据库交互。
定义老数据库接口:

package adapter;

public interface OldDatabase {
    void connect();

    void disconnect();

    void executeQuery();
}

实现老数据库:

package adapter;

public class OldDatabaseImpl implements OldDatabase{
    @Override
    public void connect() {
        System.out.println("老方法连接数据库");
    }

    @Override
    public void disconnect() {
        System.out.println("老方法断开连结");
    }

    @Override
    public void executeQuery() {
        System.out.println("老数据库执行sql");
    }
}

定义新数据库接口:

package adapter;

public interface NewDatabase {

    void openConnection();

    void closeConnection();

    void performQuery();
}

实现新数据库

package adapter;

public class NewDataBaseImpl implements NewDatabase{
    @Override
    public void openConnection() {
        System.out.println("新的数据库连接方法");
    }

    @Override
    public void closeConnection() {
        System.out.println("新的断开连接方法");
    }

    @Override
    public void performQuery() {
        System.out.println("新数据库执行sql");
    }
}

新老数据库适配器:

package adapter;

public class OldDataBaseAdapter implements OldDatabase {

    private NewDatabase newDatabase;

    public OldDataBaseAdapter(NewDatabase newDatabase) {
        this.newDatabase = newDatabase;
    }

    @Override
    public void connect() {
        newDatabase.openConnection();
    }

    @Override
    public void disconnect() {
        newDatabase.closeConnection();
    }

    @Override
    public void executeQuery() {
        newDatabase.performQuery();
    }
}

客户端代码:

package adapter;

public class Client {
    public static void main(String[] args) {
        NewDatabase newDatabase = new NewDataBaseImpl();
        OldDataBaseAdapter oldDataBaseAdapter = new OldDataBaseAdapter(newDatabase);
        oldDataBaseAdapter.connect();
        oldDataBaseAdapter.disconnect();
        oldDataBaseAdapter.executeQuery();
    }
}

总结:在这个例子中,我们通过创建一个DatabaseAdapter类,该类实现了OldDatabase接口,但内部使用NewDatabase实例。这样,当系统需要使用旧接口进行数据库操作时,实际上是通过适配器调用新数据库系统的接口。这样,就实现了在不修改系统其他部分代码的情况下,无缝切换到新数据库系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值