话说这几天,王小二通过C哥的精心指导,初步领悟了设计模式的魅力。git
因而小二又着手对消息中心进行了设计与重构,看,下面就是小二画的UML类图。github
小二自忖:嗯...看着还不错嘛,无论是发送短信仍是发送邮件,由于二者都继承自抽象类Message
,因此能够方便的利用面向对象的多态性,这样就进一步实现了针对接口编程,perfect!编程
(btw:不了解多态的童鞋,请戳:OOP三大特性:封装、继承、多态 补补课^_^)设计模式
新的一天又开始了,小二感受天天都在进步,这种感受特别充实,或许,码农的快乐就是这么真实简单。微信
北京的地铁依旧人潮涌动,硬着头皮终于挤上了地铁。9:20,小二到了公司。spa
“小二,你手头还有活没?”老大走过来讲道。设计
“以前的需求刚刚完事,没什么事情了。”code
“好,消息中心如今支持发送短信与邮件是吧?”对象
“是的,支持的。”继承
“嗯,不错。你知道我们公司微信会员特别多,因此发送微信这块,也要接到消息中心来。你以为能够实现吗?”
“嗯...能够实现,如今消息中心的结构很清晰,2天就能搞定!”
“好,不错,你开始作这块吧!”
"好的,没问题。"
小二心想:“微信接入消息中心还不简单嘛,我已经对消息中心重构了,接入一个新成员还不是分分钟搞定的事儿!”
码农界流行一句话:“不要重复造轮子”。
小二对这句话深有体会,最近还参与了github上几个开源项目呢!
开工以前,小二灵机一动:"发送微信,确定是个通用的功能,github上应该有开源的项目吧?我去找找!"
不搜不知道,一搜吓一跳,还真很多呢。
小二在github上千挑万选,终于选定了一个项目。
为了更清晰的将这个项目接入消息中心,小二又针对这个项目画了一个简单的类图。
画完类图,小二仔细分析了一下:咦?github上这个WechatMessage
类中的方法,与现有消息中心的接口不同啊。既然不同,那么就没法继承自抽象类Message
。那么,就没法实现多态了,也就不能针对接口编程了。哎,好不容易找了一个开源项目,最后空欢喜一场。难道真的要本身重写一个WechatMessage
类吗? ̄へ ̄
这时,小二又想到了万能的C哥。
小二想:“C哥或许有办法,再去请教下C哥吧!”
小二找到C哥,大致描述了下本身的问题。
“小二啊,面对新需求,你首先能想到去github上找有没有开源的实现,这种方法是值得鼓励的,赞一个!”
“哈哈,谢谢C哥,开源就须要有人参与有人用嘛!”
“嗯嗯。你这个问题,能够用设计模式中的Adapter模式去解决。”
“还有Adapter模式?望C哥指点一二。”
“我给你画个类图你就明白了。”
"哦哦,我明白了,中间加一个适配器,就适配了不兼容的类"。
“对的,就是这个意思。”
“你有没有看过安卓苹果转接头,那就是一个适配器。”
“嗯嗯,见过,C哥说的太形象了,确实是!”
“C哥,前几天你给我讲的Facade模式,是对接口进行了包装。Adapter模式,也是对接口进行了包装适配。这两个看似区别不大啊?”
“区别仍是有的,要否则也不会有两个设计模式的名字。”
“嗯嗯,他俩有什么区别呢?”
“Facade模式的目的,是为了提供一个简单易用的接口给用户。而Adapter模式的目的,是为了适配某个类,从而保持对象的多态行为。”
“哦,这样啊!”
“是的,最大的不一样,就是他们俩的目的不一样。Adapter模式最经常使用的场景就是用来保持对象的多态行为。”
“嗯嗯,我明白了,多谢C哥”。
“类图都给你画出来了,代码就不要我给你写了吧?”
“哈哈,不用不用,我本身来写就好了,有了类图,分分钟搞定!”
“哈哈,小二加油,有什么不会的再问我。”
拿着C哥画好的类图,小二很快进行了适配,优雅的使用了github上的项目。
3个小时事后,小二成功实现了消息中心接入发送微信消息的功能。
小二心想:“这适配器模式真管用,大大解放了咱们一线码农的生产力,之后能够优雅的使用别人的轮子了,✌️”!
设计模式等系列文章,首发于公众号“聊聊代码”,关注公号,让咱们一块儿聊聊“左手代码右手诗”的事儿。