首页 > 其他分享 >适配器模式

适配器模式

时间:2022-11-21 14:00:21浏览次数:49  
标签:对象 适配 适配器 接口 模式 子类 Adaptee

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

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的子类了;对于对象适配器,一个适配器可以把多种不同的源适配到同一个目标。换言之,同一个适配器可以把源类和它的子类都适配到目标接口。因为对象适配器采用的是对象组合的关系,只要对象类型正确,是不是子类都无所谓。
  3. 需要重新定义Adaptee的部分行为:选择类适配器,对于类适配器,适配器可以重定义Adaptee的部分行为,相当于子类覆盖父类的部分实现方法。对于对象适配器,要重定义Adaptee的行为比较困难,这种情况下,需要定义Adaptee的子类来实现重定义,然后让适配器组合子类。虽然重定义Adaptee的行为比较困难,但是想要增加一些新的行为则方便的很,而且新增加的行为可同时适用于所有的源。
  4. 仅仅希望使用方便时:选择类适配器,对于类适配器,仅仅引入了一个对象,并不需要额外的引用来间接得到Adaptee。对于对象适配器,需要额外的引用来间接得到Adaptee。

 

七、适配器模式

1、优点

  • 更好的复用性
    系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
  • 透明、简单
    客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单 & 更直接
  • 更好的扩展性
    在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
  • 解耦性
    将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码
  • 符合开放-关闭原则
    同一个适配器可以把适配者类和它的子类都适配到目标接口;可以为不同的目标接口实现不同的适配器,而不需要修改待适配类

2、缺点

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

 

标签:对象,适配,适配器,接口,模式,子类,Adaptee
From: https://blog.51cto.com/u_13912516/5873771

相关文章

  • php中的对象池模式
    概念 对象池设计模式 是创建型设计模式,它会对新创建的对象应用一系列的初始化操作,让对象保持立即可使用的状态-一个存放对象的“池子”-而不是对对象进行一次性的的......
  • php中的流接口模式
    概念 流接口模式(FluentInterface)用来编写易于阅读的代码,就像自然语言一样(如英语)场景 Doctrine2的QueryBuilder,就像下面例子中类似PHPUnit使用连贯接口来创建mock......
  • php中的数据映射模式
    概念 数据对象映射模式,就是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作,数据映射模式使您能更好的组织你的应用程序与数据库进行交互。大家如果用......
  • php中享元模式
    概念 享元模式(Flyweight),为了节约内存的使用,享元模式会尽量使类似的对象共享内存。在大量类似对象被使用的情况中这是十分必要的。常用做法是在外部数据结构中保存类似对象......
  • php中的组合模式
    概念 当我们的一个对象可能代表一个单一的实体,或者一个组合的实体,但是仍然需要通过同样的方式被使用时,这种情形则适合使用组合模式的设计。 示例一个表单类实例在处理其......
  • php中的模板模式
    概念 在模板模式(TemplatePattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。定义一个操作中的......
  • 设计模式的基本原则
    设计模式设计模式的世界丰富多彩,比如生产一个个「产品」的工厂模式,衔接两个不相关接口的适配器模式,用不同的方式做同一件事的策略模式,构建步骤稳定、根据构建过程的不同配置......
  • Laravel中用到的设计模式
    1:工厂模式 Auth::user()此处Auth这个类就是工厂中的方法,Auth是注册树中的别名。好处:类似于函数的封装,使对象有一个统一的生成(实例化)入口。当我们对象所对应的类的类名发......
  • 饿汉模式,懒汉模式线程安全问题
    饿汉模式:上来不管三七二十一直接创建对象再说。饿汉模式创建方式:1.先创建一个私有的构造函数(防止其它地方直接实例化)2.定义私有变量3.提供公共的获取实例的方法pub......
  • 设计模式--创建型模式
    设计模式--创建型模式创建型模式,共五种:工厂方法模式(一个工厂类ReturnNew子类)、抽象工厂模式(一个厂一个子类)、单例模式(恶汉,懒汉)、建造者模式(组合)、原型模式(Cloneable浅......