设计模式系列·Adapter模式之如何优雅的使用别人的轮子

消息中心的重构

话说这几天,王小二通过C哥的精心指导,初步领悟了设计模式的魅力。git

因而小二又着手对消息中心进行了设计与重构,看,下面就是小二画的UML类图。github

Main.png-15.2kB

小二自忖:嗯...看着还不错嘛,无论是发送短信仍是发送邮件,由于二者都继承自抽象类Message,因此能够方便的利用面向对象的多态性,这样就进一步实现了针对接口编程,perfect!编程

(btw:不了解多态的童鞋,请戳:OOP三大特性:封装、继承、多态 补补课^_^)设计模式

消息中心的新成员

新的一天又开始了,小二感受天天都在进步,这种感受特别充实,或许,码农的快乐就是这么真实简单。微信

北京的地铁依旧人潮涌动,硬着头皮终于挤上了地铁。9:20,小二到了公司。spa

“小二,你手头还有活没?”老大走过来讲道。设计

“以前的需求刚刚完事,没什么事情了。”code

“好,消息中心如今支持发送短信与邮件是吧?”对象

“是的,支持的。”继承

“嗯,不错。你知道我们公司微信会员特别多,因此发送微信这块,也要接到消息中心来。你以为能够实现吗?”

“嗯...能够实现,如今消息中心的结构很清晰,2天就能搞定!”

“好,不错,你开始作这块吧!”

"好的,没问题。"

小二心想:“微信接入消息中心还不简单嘛,我已经对消息中心重构了,接入一个新成员还不是分分钟搞定的事儿!”

善用github

码农界流行一句话:“不要重复造轮子”。

小二对这句话深有体会,最近还参与了github上几个开源项目呢!

开工以前,小二灵机一动:"发送微信,确定是个通用的功能,github上应该有开源的项目吧?我去找找!"

不搜不知道,一搜吓一跳,还真很多呢。

image_1bcagtas118fuuhp13bt6qmqf19.png-129kB

小二在github上千挑万选,终于选定了一个项目。

为了更清晰的将这个项目接入消息中心,小二又针对这个项目画了一个简单的类图。

image_1bcahhh861vdv18s14tbojm160tm.png-29kB

画完类图,小二仔细分析了一下:咦?github上这个WechatMessage类中的方法,与现有消息中心的接口不同啊。既然不同,那么就没法继承自抽象类Message。那么,就没法实现多态了,也就不能针对接口编程了。哎,好不容易找了一个开源项目,最后空欢喜一场。难道真的要本身重写一个WechatMessage类吗? ̄へ ̄

这时,小二又想到了万能的C哥。
小二想:“C哥或许有办法,再去请教下C哥吧!”

Adapter模式解千愁

小二找到C哥,大致描述了下本身的问题。

“小二啊,面对新需求,你首先能想到去github上找有没有开源的实现,这种方法是值得鼓励的,赞一个!”

“哈哈,谢谢C哥,开源就须要有人参与有人用嘛!”

“嗯嗯。你这个问题,能够用设计模式中的Adapter模式去解决。”

“还有Adapter模式?望C哥指点一二。”

“我给你画个类图你就明白了。”

4.png-43.2kB

"哦哦,我明白了,中间加一个适配器,就适配了不兼容的类"。

“对的,就是这个意思。”

“你有没有看过安卓苹果转接头,那就是一个适配器。”

“嗯嗯,见过,C哥说的太形象了,确实是!”

image_1bcaiqgkopfl1mf4mjhh7e1ip51f.png-255.7kB

Adapter模式与Facade模式的区别

“C哥,前几天你给我讲的Facade模式,是对接口进行了包装。Adapter模式,也是对接口进行了包装适配。这两个看似区别不大啊?”

“区别仍是有的,要否则也不会有两个设计模式的名字。”

“嗯嗯,他俩有什么区别呢?”

“Facade模式的目的,是为了提供一个简单易用的接口给用户。而Adapter模式的目的,是为了适配某个类,从而保持对象的多态行为。”

“哦,这样啊!”

“是的,最大的不一样,就是他们俩的目的不一样。Adapter模式最经常使用的场景就是用来保持对象的多态行为。”

“嗯嗯,我明白了,多谢C哥”。

“类图都给你画出来了,代码就不要我给你写了吧?”

“哈哈,不用不用,我本身来写就好了,有了类图,分分钟搞定!”

“哈哈,小二加油,有什么不会的再问我。”

优雅的使用别人的轮子

拿着C哥画好的类图,小二很快进行了适配,优雅的使用了github上的项目。

3个小时事后,小二成功实现了消息中心接入发送微信消息的功能。

小二心想:“这适配器模式真管用,大大解放了咱们一线码农的生产力,之后能够优雅的使用别人的轮子了,✌️”!

设计模式等系列文章,首发于公众号“聊聊代码”,关注公号,让咱们一块儿聊聊“左手代码右手诗”的事儿。
图片描述

相关文章
相关标签/搜索