zoukankan      html  css  js  c++  java
  • 适配器模式

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

    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

     

  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
  • 原文地址:https://www.cnblogs.com/igoodful/p/9442560.html
Copyright © 2011-2022 走看看