likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 38

前言

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

适配器模式

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

示例

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

举例如下:

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

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

分析

  首先我们文中的两个类创建出来,创建结果如下: 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();
    }

输出结果如下:

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

  好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。

转载自:https://juejin.cn/post/7022188869900107806
评论
请登录