设计模式与足球(二):结构型模式

撸了今年阿里、腾讯和美团的面试,我有一个重要发现…….

作者:Liuwei-Sunny

出处:https://blog.csdn.net/lovelion


结构型模式

(6) 适配器模式:很多足球队都喜欢请外国教练(其中有一支我们都非常熟悉的国家队,名字偶就不说了,大家都懂的,![微笑][smile.gif]),外国教练请回来通常很难跟队员直接交流(语言不通),因此需要配翻译,此时,翻译充当了教练和队员之间的适配器,负责协调教练和队员之间的交流。

例如:pass –> shoot –> goal 转换传球 –> 射门 –> 进球

适配器模式(Adapter): 将一个类的接口转换成用户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

(7) 桥接模式:在足球比赛中,有人踢前锋、有人踢中场(前腰、中卫)、有人踢后卫;当然,有人习惯踢左边、有人习惯踢右边、也有人喜欢站在中间,因此诞生了左中卫、右前锋、中后卫、右后卫等名词,难道这不是两个变化维度的组合吗?

桥接模式(Bridge): 将抽象部分与实现部分分离,使它们都可以独立地变化。

(8) 组合模式:2012年欧洲杯一共分为四个组,每个组四个队,每个队有23名球员,如果要用一个图来表示2012年欧洲杯全体球员及各国分组情况,不用说,一定是个树状图,组里有队,队里有人,如果想要召开B组(赛前公认的死亡之组)队员大会,在B组的节点上写下通知:“下午3点,召开重要会议,事关出线!”,想必荷兰、德国、葡萄牙、丹麦队员都会积极响应,随叫这几个“苦逼”队位于同一个节点的分支上呢?

组合模式(Composite): 将对象组合成树形结构以表示“部分-整体”的层次结构,它使得客户对单个对象和复合对象的使用具有一致性。

(9) 装饰模式:现在足球服上的广告越来越多了,2012年欧洲杯夺冠热门之一(赛前预测)德国队队服胸前右边一个奔驰,左边一个阿迪,当然还可以继续增加,广告既没有改变球衣的用途和性能,还能起到装饰效果,增加收入,何乐而不为呢?就是半决赛没能够让巴神继续“思考人生”,悲催的德国队!增加新的广告,只需对原有球服继续装饰即可。

装饰模式(Decorator): 动态地给一个对象添加一些额外的职责,就扩展功能而言, 它比生成子类的方式更为灵活。

(10) 外观模式:为了给记者和球队(球员、教练等)提供一个交流的平台,欧洲杯组委会在每场足球比赛前后都安排了新闻发布会,记者可以通过新闻发布会来与球队进行沟通交流(虽然不是每个队员会出现在新闻发布会上),在此,新闻发布会充当了记者(客户端)和队员、教练(子系统)之间的外观角色。当然,新闻发布会并不会影响某位记者单独采访某位球员(这一点也与外观类的定义一致)。

外观模式(Facade): 子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

(11) 享元模式:同一个国家队的队员,他们都共享着一个伟大的称谓,即”XXX国家队队员”,例如“意大利国家队队员”、“西班牙国家队队员”(一说到“中国国家队队员”就伤心,还是不说了),因此,”XXX国家队队员”是一个可以共享的内部状态。但是在比赛过程中,每个队员身披不同号码的球衣,球衣号码是不能共享的,同一个国家队的队员每个人都拥有不同的号码,因此,球衣号码是不能够共享的外部状态。在享元模式中区分了对象的内部状态和外部状态。

享元模式(Flyweight): 运用共享技术有效地支持大量细粒度的对象。

(12) 代理模式:足球场外,球员转会是一个热门话题。转会当然离不开球员的经纪人,经纪人将球员的想法传递给另一家俱乐部。经纪人就是球员的代理,球员是目标对象,而经纪人是代理对象,经纪人隔离了球员和“客户端”,“拍广告,请找我的经纪人”,“采访,请找我的经纪人”……

代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。

赞(0) 打赏

如未加特殊说明,此网站文章均为原创,转载必须注明出处。Java 技术驿站 » 设计模式与足球(二):结构型模式
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

关注【Java 技术驿站】公众号,每天早上 8:10 为你推送一篇技术文章

扫描二维码关注我!


关注【Java 技术驿站】公众号 回复 “VIP”,获取 VIP 地址永久关闭弹出窗口

免费获取资源

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏