• 设计模式:适配器模式


    定义

    适配器模式(Adapter Pattern),也称为包装器(Wrapper)模式,是一种结构型设计模式,它允许不兼容的接口之间进行交互。适配器模式通过包装一个已有的类,提供一个与原系统兼容的接口,从而使得原本由于接口不兼容而不能一起工作的类可以协同工作。

    应用场景

    适配器模式通常在以下场景中使用:

    • 当你希望使用某个类,但是它的接口与其他代码不兼容时。
    • 当你想创建一个可重用的类,该类可以与未知的或未来的类(即那些接口可能不兼容的类)协同工作。
    • 当你需要使用几个现有的子类,但是子类化每个类以适配它们的接口会导致代码可用性下降时。

    示例

    假设有一个旧的电子邮件系统,它的客户端代码只能与EmailClient接口兼容。现在,你想要集成一个新的邮件系统,但是其接口与旧系统不兼容。适配器模式可以在这里发挥作用。

    // 旧的电子邮件客户端接口
    public interface EmailClient {
        void sendEmail(String messageBody);
    }
    
    // 新的邮件系统接口
    public interface AdvancedEmailClient {
        void sendEmailMessage(String subject, String body);
    }
    
    // 适配器实现
    public class EmailAdapter implements EmailClient {
        private AdvancedEmailClient advancedEmailClient;
    
        public EmailAdapter(AdvancedEmailClient client) {
            this.advancedEmailClient = client;
        }
    
        @Override
        public void sendEmail(String messageBody) {
            advancedEmailClient.sendEmailMessage("Adapted", messageBody);
        }
    }
    
    // 新邮件系统类实现
    public class NewEmailSystem implements AdvancedEmailClient {
        public void sendEmailMessage(String subject, String body) {
            // 新邮件系统的发送逻辑
        }
    }
    
    // 客户端代码
    public class Client {
        public static void main(String[] args) {
            AdvancedEmailClient newEmailSystem = new NewEmailSystem();
            EmailClient client = new EmailAdapter(newEmailSystem);
            client.sendEmail("Hello World!");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    原则间的权衡与冲突

    适配器模式遵循了以下设计原则:

    • 开闭原则:允许系统接受新的适配器或已有适配器的变化,而无需修改现有代码。
    • 单一职责原则:适配器类的唯一职责是将一个接口转换为另一个接口。

    然而,过多地使用适配器可能会导致系统中类的数量增加,并且增加系统的复杂性,这可能与简洁性(KISS)原则和最少知识原则(Law of Demeter)相冲突。

    设计模式的局限性

    • 过度使用:过度使用适配器可能会导致系统变得非常混乱,很难理解和维护。
    • 不是万能的:适配器模式无法适配所有的接口问题,特别是当待适配的类的接口非常复杂时。

    总结与建议

    适配器模式是实现系统间组件接口兼容的一个有效途径。它允许现有系统与第三方库、新系统或者未来的系统进行交互,而不需要修改现有的代码。

    建议在以下情况使用适配器模式:

    • 需要使用现有类,但其接口与其他代码不兼容时。
    • 需要创建可以与未知或不相关的类协同工作的灵活代码时。

    在设计系统时,应当谨慎使用适配器模式,以避免不必要的复杂性。如果接口不匹配的问题可以通过重构来解决,那么可能更应该选择重构而非适配器。适配器模式应当作为连接不兼容接口的最后手段,而不是首选解决方案。

  • 相关阅读:
    java毕业设计超市管理系统Mybatis+系统+数据库+调试部署
    C语言- 基础数据结构和算法 - 09 栈的应用_中缀表达式转后缀表达式20220611
    基于SSM的人力资源管理系统,高质量毕业论文范例-可直接使用
    小白零基础学Java该怎么学习?如何快速入门?
    防暑降温
    关于在 Linux 下多个不相干的进程互斥访问同一片共享内存的问题
    晚上弱光拍照不够清晰,学会这几招画面清晰效果好
    轻松拿下——类的默认成员函数
    vue中props父给子传值,子组件可以改变父组件的值
    openvino系列教程之人脸检测 mobilenetv2
  • 原文地址:https://blog.csdn.net/liu_rockefeller/article/details/137370742