【小知识】通过简单案例学习适配器模式

简介: 【小知识】通过简单案例学习适配器模式

前言


  适配器模式是两个不复杂的接口之间的基本结构模式。主要功能是将一个类的接口转化成希望的其他一个接口。


适配器模式


  适配器模式定义一个包装类,用于包装不兼容接口的对象,主要作用是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。


示例


  正好在学习适配器模式,看有个相关的示例,于是记录下来,分享给大家。


举例如下:


  某软件系统中,已设计并实现了用于显示地址信息的类 Address(如图 下图 所示),现要 求提供基于 Dutch 语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新 的语言的接口,决定采用适配器(Adapter)模式实现该要求,得到如图所示的类图。


image.png


分析


  首先我们文中的两个类创建出来,创建结果如下: Address类


class Address {
    public void street() {
        System.out.println("Address---street");
    }
    public void zip() {
        System.out.println("Address---zip");
    }
    public void city() {
        System.out.println("Address---city");
    }
}


DutchAddress类


class DutchAddress {
    public void straat() {
        System.out.println("DutchAddress----straat");
    }
    public void postcode() {
        System.out.println("DutchAddress----postcode");
    }
    public void plaats() {
        System.out.println("DutchAddress----plaats");
    }
}


DutchAddressAdapter适配器类,需要继承DutchAddress。


class DutchAddressAdapter extends DutchAddress {
    private Address address;
    public DutchAddressAdapter(Address addr) {
        address = addr;
    }
    @Override
    public void straat() {
        address.street();
    }
    @Override
    public void postcode() {
        address.zip();
    }
    @Override
    public void plaats() {
        address.city();
    }
}


运行测试


  如下两个方法,点击运行测试,会将DutchAddress 转换成Address。


public static void main(String[] args) {
        Address address = new Address();
        DutchAddress dutchAddress = new DutchAddressAdapter(address);
        System.out.println("The DutchAddress");
        testDutch(dutchAddress);
    }
    public static void testDutch(DutchAddress addr) {
        addr.straat();
        addr.postcode();
        addr.plaats();
    }


输出结果如下:


image.png



目录
相关文章
|
7月前
|
存储 Windows
【Azure Cloud Service】微软云服务上的日志收集方法
本文介绍了在使用微软云服务(Cloud Service Extended Support)时,如何收集日志以分析未记录在应用日志中的服务异常。由于云服务基于传统虚拟机模式,需通过远程桌面登录实例,查看IIS、Windows Event及云服务组件日志(如WindowsAzureGuestAgent)。此外,可使用CollectGuestLogs.exe工具打包日志,或通过“File Server Resource Manager”检查日志存储配额是否不足。附参考文档链接供深入学习。
231 30
|
SQL Java Maven
idea如何建立一个springboot项目
idea如何建立一个springboot项目
285 0
|
机器学习/深度学习 自然语言处理 TensorFlow
TensorFlow:深度学习框架的领航者
**TensorFlow**是谷歌开源的机器学习框架,用于深度学习和大规模数据处理。它以数据流图为基础,支持分布式计算,提供高效、灵活且可扩展的环境。自2015年以来,经过多次升级,包括引入Eager Execution,提升了开发效率。TensorFlow广泛应用于图像识别、自然语言处理、推荐系统和语音识别等领域,其丰富的API和工具简化了模型构建,促进了深度学习的发展。【6月更文挑战第5天】
355 9
初步理解ECC
初步理解ECC
|
12月前
|
消息中间件 Kafka
使用kafka consumer加载数据加载异常并且报source table and destination table are not same错误解决办法
使用kafka consumer加载数据加载异常并且报source table and destination table are not same错误解决办法
|
弹性计算 关系型数据库 MySQL
在云服务器ECS上搭建个人网站
本实验帮助您快速了解云上应用的构建方式,同时通过您可以采取的工具、方法和可操作步骤,以帮助您了解如何便捷的搭建属于自己的云上应用。
|
关系型数据库 MySQL 网络安全
rhel 8.7 部署 keepalived+haproxy 实现 mysql 双主高可用场景 1
rhel 8.7 部署 keepalived+haproxy 实现 mysql 双主高可用场景
250 0
|
编译器 C++ 容器
[Eigen中文文档] 将STL容器与Eigen一起使用
如果使用足够新的编译器(例如,GCC>=7、clang>=5、MSVC>=19.12)以 [c++17] 模式编译,那么编译器会自动处理所有事情,可以跳过本节。 否则,在固定大小的可向量化 Eigen 类型或具有此类成员的类上使用 STL 容器时,需要使用过度对齐的分配器。
413 0
|
Docker 异构计算 容器
通过PID查看对应的docker
在nvidia-smi发现GPU占用时,想要寻找是哪个docker在使用,通过PID寻找。
897 0
通过PID查看对应的docker
|
存储 测试技术 网络安全
SDN 系统方法 | 8. 网络虚拟化
SDN 系统方法 | 8. 网络虚拟化
798 0
SDN 系统方法 | 8. 网络虚拟化