设计模式7-适配器模式(Adapter)总结整理与练习

本文是对面向对象设计模式--适配器模式(Adapter)的学习整理总结与练习,主要分为模式定义、学习要点整理、多案例练习加深对模式的理解、最后总结知识要点。

第一篇:模式定义

适配器模式是GoF四人帮整理的《设计模式-可复用面向对象软件基础》一书中23种设计模式中归类为结构型模式中的设计模式,23种设计模式根据它们的用途分为三大类:5种创建型模式、7种结构型模式、11种行为型模式。

适配器模式:

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

设计模式7-适配器模式(Adapter)总结整理与练习_第1张图片

适配器模式其目的就是为了将一个接口--被适配者转换成目标接口,使得通过目标接口便可以调用被适配接口的对象。适配器模式根据适配器的实现方式分为类适配器和接口适配器,类适配器通过组合的方式,适配器类直接引用被适配对象。接口适配器通过继承或实现的方式,适配器类同时实现目标接口与被适配接口。

第二篇:学习要点整理

装饰者模式将对象包装起来,赋予它们新的职责。适配器则是以不同目的,包装某些对象:让它们的接口看起来不像自己而像是别的东西。

为何要这样做?因为这样就可以在设计中,将类的接口转换成想要的接口,以便实现不同的接口。

现实生活中的适配器

有一个壁式三孔插座和一个二口插头,现在为了让插头能够插入插座正常通电,需要一个适配器,它的工作就是将三孔插座转换成二孔插座,好让二口插头插进这个插座而得到电力。

或者说:适配器改变了插座的接口,以符合二口插头的需求。

设计模式7-适配器模式(Adapter)总结整理与练习_第2张图片

设计模式7-适配器模式(Adapter)总结整理与练习_第3张图片

设计模式7-适配器模式(Adapter)总结整理与练习_第4张图片

1.A、B两个图框代表已经塑模成型的物体A和物体B,那现在要求把A和B安装在一起使用,如何安装?

2.两者的接口不一致,是不可能安装在一起使用的,那怎么办?引入一个物体C,C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个完整的物体。

3.其中的物体C就是我们说的适配器,它在中间起到了角色转换的作用,把原有的长条形接口转换了三角形接口。 适配器模式也是相似的功能。

 

面向对象中的适配器

面向对象中适配器扮演的角色是:将一个接口转换成另一个接口,以符合客户的期望。

假设已有一个软件系统,你希望它能和一个新厂商类库搭配使用,但是这个新厂商所设计出来的接口,不同于旧厂商的接口。

你不想改变现有的代码,解决这个问题,你可以写一个类,将新厂商接口转接成你所期望的接口。这个适配器工作起来就如同一个中间人,它将客户所发出的请求转换成厂商类能理解的请求。

设计模式7-适配器模式(Adapter)总结整理与练习_第5张图片

适配器模式的工作是将一个接口转换成另一个接口。大多数情况采用的都是让一个适配器包装一个被适配者,但复杂的情况下,也可以让一个适配器包装多个被适配者。

这个模式可以通过创建适配器进行接口转换,让不兼容的接口变成兼容。这可以让客户从实现的接口解耦。

 

第三篇:案例实践

练习案例源码:https://github.com/chentian114/100-dayaction/tree/master/designpattern-1

AdapterDemo对象适配器模式实现案例:

适配器模式把一个类的接口变换成客户端所期待的另一个接口,从而使原本因为接中不匹配而无法一起工作的两个类能够在一起工作。

DuckAdapterDemo鸭子适配器案例:

情况紧急,你需要一只鸭子上台表演,但你只有一只火鸡,所以你将火鸡打扮成鸭子上台表演了。

UserInfoDemo公司员工信息案例:

人公司员信息系统管理所有员工的所有信息:用户姓名、家庭地址、办公电话、职位等。现在系统升级要能够管理公司借用的劳务公司人员信息,劳动服务公司是把人员信息分为:基本信息、办公信息和个人家庭信息。

MonkDemo鲁智深出家当和尚案例(缺省适配器):

和尚需要吃斋、念经、打坐、撞钟、习武,但鲁智深出家后只习武,其它戒律确并不遵守,如何代码实现花和尚。

 

第四篇:总结

适配器模式的用意是要改变源的接口,以便于和目标接口相容。

类适配器和对象适配器:适配器模式根据实现不同可分为类适配器和对象适配器两种。

类适配器与对象适配器对比:

1)类适配器使用继承的方式,是静态的定义方式;而对象适配器使用对象组合的方式,是动态组合的方式。

2)对于类适配器,适配器继承自Adaptee,使得适配器不能和Adaptee的子类或者兄弟类一起工作,继承是静态的,程序运行过程中无法改变。

3)对于对象适配器,一个适配器可以把源类和它的子类都适配到目标接口,因为组合是动态的,程序运行过程中可以修改。

4)对于类适配器,可以重定义Adaptee的部分行为,通过子类覆盖父类的实现方法。而对象适配重定义Adaptee的行为比较困难,只能进行一些新增。 建议尽量使用对象适配器的实现方式,多用组合,少用继承。

适配器模式的优点:

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

2)更好的扩展性;在实现适配器的功能的时候,可以对适配的接口进行扩展。

3)适配器模式可以让两个没有任何关系的类在一起运行。

4)增加了类的透明性,访问的是Target目标角色,实际具体实现委托给了Adaptee源角色,而这些对高层模块调用者是透明的。

适配器模式的缺点:

过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如调用A接口,其实内部被适配成B的接口实现。

使用场景:

修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,需要使用一个已有或新建立的类,但这个类又不符合系统的接口。

注意事项:

适配器模式最好在详细设计阶段不要考虑它,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题。

 

缺省适配器:为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接中进行扩展。

适用场景:在一些情况下,必须让一个具体类实现某一个接口,但是又用不到接口所规定的所有方法。

缺省适配器很好的处理这一情况,设计一个抽象的适配器类实现接口,此抽象类给接口的所有方法提供一个空的方法。任何继承自抽象类的具体类都可以选择它所需要的方法进行实现,而不需要理会其它方法。

缺省适配器的用意是为了方便建立一个不平庸的类而提供的一种平庸实现。

 

你可能感兴趣的:(设计模式,100天行动)