• 适配器模式


    一、对象适配器(关联委派)

    1、被适配者类Adaptee:原有的属性和方法。

    2、目标接口Target:新增一些方法。

    3、适配器类Adapter:持有被适配者类Adaptee的对象,即Adaptee类委派给Adapter类,因此Adaptee类和它的子类都可以适用。实现目标接口Target。持有原有的属性和方法,同时不可直接修改原有方法,还实现了目标接口中新增的方法。而且适配器类只有这些方法可以使用。替换原有类的一些方法比较麻烦,可能需要先写一个Adaptee类的子类,然后将其子类委派给Adapter类。重定义原有方法困难,因为这是关联委派关系。建议尽量使用对象适配器的实现方式,多用合成/聚合、少用继承。当然,具体问题具体分析,根据需要来选用实现方式,最适合的才是最好的。

    4、

    二、类适配器(继承覆写)

    1、被适配者类Adaptee:原有的属性和方法。

    2、目标接口Target:新增一些方法。

    3、适配器类Adapter:继承被适配者类Adaptee,实现目标接口Target。继承原有的属性和方法,同时也可以修改原有方法,还实现了目标接口中新增的方法。既可以使用和修改原有类的属性和方法,还可以使用目标接口中声明的方法。一个适配器类对应一个被适配者类,因为这是继承关系

    4、

    三、接口适配器

    四、优点

    1、类适配器模式还具有如下优点:

    由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

    2、对象适配器模式还具有如下优点:

    一个对象适配器可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

    五、缺点

    1、类适配器模式的缺点如下:

    对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性,不能将一个适配者类和它的子类都适配到目标接口。

    2、对象适配器模式的缺点如下:

    与类适配器模式相比,要想置换适配者类的方法就不容易。如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。

    六、类和对象适配器模式的使用场景

    1. 灵活使用时:选择对象的适配器模式
      类适配器使用对象继承的方式,是静态的定义方式;而对象适配器使用对象组合的方式,是动态组合的方式。

    2. 需要同时配源类和其子类:选择对象的适配器对于类适配器,由于适配器直接继承了Adaptee,使得适配器不能和Adaptee的子类一起工作,因为继承是静态的关系,当适配器继承了Adaptee后,就不可能再去处理 Adaptee的子类了;对于对象适配器,一个适配器可以把多种不同的源适配到同一个目标。换言之,同一个适配器可以把源类和它的子类都适配到目标接口。因为对象适配器采用的是对象组合的关系,只要对象类型正确,是不是子类都无所谓。

    1. 需要重新定义Adaptee的部分行为:选择类适配器,对于类适配器,适配器可以重定义Adaptee的部分行为,相当于子类覆盖父类的部分实现方法。对于对象适配器,要重定义Adaptee的行为比较困难,这种情况下,需要定义Adaptee的子类来实现重定义,然后让适配器组合子类。虽然重定义Adaptee的行为比较困难,但是想要增加一些新的行为则方便的很,而且新增加的行为可同时适用于所有的源。
    1. 仅仅希望使用方便时:选择类适配器,对于类适配器,仅仅引入了一个对象,并不需要额外的引用来间接得到Adaptee。对于对象适配器,需要额外的引用来间接得到Adaptee。

    七、适配器模式

    1、优点

    • 更好的复用性

      系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。

    • 透明、简单

      客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单 & 更直接

    • 更好的扩展性

      在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

    • 解耦性

      将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码

    • 符合开放-关闭原则

      同一个适配器可以把适配者类和它的子类都适配到目标接口;可以为不同的目标接口实现不同的适配器,而不需要修改待适配类

    2、缺点

    • 过多的使用适配器,会让系统非常零乱,不易整体进行把握

    八、具体讲解。

    1、对象适配器。http://www.cnblogs.com/igoodful/p/9377679.html

    2、类适配器。http://www.cnblogs.com/igoodful/p/9377610.html

    3、接口适配器。http://www.cnblogs.com/igoodful/p/9377775.html

     

  • 相关阅读:
    Python正则表达式很难?一篇文章搞定他,不是我吹!
    该用Python还是SQL?4个案例教你节省时间
    解决mysql中只能通过localhost访问不能通过ip访问的问题
    MySql按周/月/日分组统计数据的方法
    jquery清空form表单
    eclipse 创建 maven web工程
    微信授权登录
    bootstrap滑动开关插件使用
    去除编译警告@SuppressWarnings注解用法详解(转)
    dataTables添加序号和行选中框
  • 原文地址:https://www.cnblogs.com/igoodful/p/9442560.html
Copyright © 2020-2023  润新知