search.png
关于我
menu.png
Java设计模式总结(一)适配器模式

图片来自《Java设计模式》第2版

适配器模式

1、类适配器模式

类适配器模式继承自现有的类,同时实现目标接口。

在这里插入图片描述
在这里插入图片描述

类适配器模式:ExistingClass 是已实现的类,而和提供的接口不符合,ExstingClass 提供的是usefulMethod(),接口要求的是requiredMethod(),在不修改ExistingClass的前提下,这时可以通过适配器模式,让NewClass实现接口,并继承ExistingClass,在实现requiredMethod方法时调用usefulMethod方法即可。

在这里插入图片描述
在这里插入图片描述

利用类适配器模式,在不修改PhysicalRocket的前提下,将PhysicalRocket适配到RocketSim接口,OozinozRocket需实现setSimTime。

2、对象适配器模式

对象适配器模式继承自目标类,同时引用现有的类。

在这里插入图片描述
在这里插入图片描述

对象适配器模式,适用于没有接口可以实现的情况,在内部创建ExistingClass实例对象使用委托方式调用其方法。
这种方式适用于适配虚类。

在这里插入图片描述
在这里插入图片描述

OozinozSkyrocket 通过在内部添加PhysicalRocket实例的方式,来适配Skyrocket。
该种方式有一定的缺点,和接口适配相比,如果Skyrocket方法有变化,如将getMass变为getAllMass,那么OozinozRocket无法在编译时检查到错误,只有运行才发现没适配上(如果用@OverRide注解可以避免这个问题)。而接口则省力的多,未实现对应的方法编译时就会警告。此外,若需要直接使用父类的属性,也有不是protected的风险,但一般都有get/set方法,问题不大。
在这里插入图片描述
在这里插入图片描述

swing 中 TableModle使用了对象适配器模式。

版权声明

知识共享许可协议 本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
发布时间:2020年02月05日 14:45:59

评论区#

还没有评论哦,期待您的评论!

关闭特效