Adapter模式(适配器模式 结构型)

1.意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作得那些类可以一起工作。

2.别名:包装器Wrapper。

3.动机:有些工具类不能被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配。

举个栗子。(发觉这个栗子好难举啊,还是用下别人的好了)

有一个绘图编辑器,这个编辑器允许用户绘制和排列基本图元(线、多边形和正文等)生成图片和图表。这个绘图编辑器的关键抽象是图形对象。图形对象有一个可编辑的形状,并可以绘制自身。图形对象的接口由一个称为Shape的抽象类定义。绘图编辑器为每一种图像对象定义了一个Shape的子类:LineShape类对应于直线,PolygonShape类对应于多边形,等等。

像LineShape和PolygonShape这样的基本几何图形的类比较容易实现,但是对于可以显示和编辑正文的TextShape子类来说,实现相当困难,因为即使是基本的正文编辑也要涉及到复杂的屏幕刷新和缓冲区管理。同时成品的用户界面工具箱可能已经提供了一个复杂的TextShape类,但是工具箱的设计者当时没有考虑Shape的存在,因此TextView和Shape对象不能互换。

我们可以定义一个TextShape类,由它来适配TextView的接口和Shape的接口。我们可以用两种方法做这件事:1)继承Shape类的接口和TextView的实现,或2)将一个TextView实例作为TextShape的组成部分,并且使用TextView的接口实现TextShape。这两种方法恰恰对应于Adapter模式的类和对象版本。

1)Adapter类适配器版本,依赖于多重继承


Adapter共有继承于Target类,私有继承于Adaptee类,然后用Adaptee的SpecificRequest()函数去实现Request()接口。

2)对象适配器版本,依赖于对象组合


Adapter继承了Target类,然后增加Adaptee作为Adapter的成员变量,用adaptee->SpecificRequest()实现Adapter的Request函数。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章