java设计模式--对象适配器模式

目录

一、适配器模式(Adapter Pattern)的思想

思想:把一个类/接口转换为客户端期望的形式。

这样做的好处:

1.使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

2.通过增加一个接口,将已存在的子类封装起来,客户端面向接口编程,从而隐藏了具体子类。

二、适配器模式中的三个角色

  • 目标(Target): 客户端期待得到的接口。
  • 源(Adaptee):需要被适配的接口。
  • 适配器(Adapter):连接目标和源,把源接口转换成期待的目标接口。

适配器模式包括3种形式:类适配器模式、对象适配器模式、接口适配器模式。本文主要介绍对象适配器。

三、对象适配器模式

在对象适配器模式中,目标ITarget是一个与客户端需求匹配的接口,适配器Adapter和源Adaptee之间是委派关系(delegation)。

以下面的代码为例:

客户端想调用LegacyRectangle中的方法,画出一个长方形。这个例子中LegacyRectangle类就是源。但是客户端想要传入的是左上角的顶点和右下角的顶点,而源Adaptee中的方法需要的参数是左上角的顶点,以及宽和高,出现了不适配。

class Client {
    public display() {
        new LegacyRectangle().display(x1, y1, x2, y2);//客户端想要传入左上角的顶点和右下角的顶点
    }
}                                                     
class LegacyRectangle {
    void display(int x1, int y1, int w, int h) {
        ...                                          //源Adaptee中的方法需要的参数是左上角的顶点,以及宽和高
    }
}

此时通过对象适配器模式,先增加一个接口shape ,这个接口与客户端的要求适配。(客户端对抽象接口编程,与LegacyRectangle隔离)

interface Shape 
{
    void display(int x1, int y1, int x2, int y2);
}

再用一个Rectangle类实现shape接口,此时Rectangle充当的是Adapter的角色,通过与LegacyRectangle类建立委派关系完成display方法的实现。

class Rectangle implements Shape {
    void display(int x1, int y1, int x2, int y2) {
        new LegacyRectangle().display(x1, y1, x2-x1, y2-y1);    //通过委派完成display
    }
}

此时客户端的代码实现如下:

class Client{
    Shape shape = new Rectangle();    //客户端对抽象接口编程,与LegacyRectangle隔离
    public display() {
        shape.display(x1, y1, x2, y2);
    }
}

可以看到,通过适配器Rectangle, 解决了LegacyRectangle与客户端期望形式不匹配的问题,实现了代码的复用。


总结

适配器模式的优点

代码复用:使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。可以复用已经实现的类的功能。

封装:通过增加一个接口,将已存在的子类封装起来,客户端面向接口编程,从而隐藏了具体子类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值