设计模式实际工作实践——桥梁模式

设计模式实际工作实践——桥梁模式

阅读引导

1、多维度分析。

2、适用于有可能多个维度组合形成一个场景,并且各个维度可能分别演化的场景

3、为自己工作,为自己的系统工作,做自己的老板,形成正循环:打磨当前工作的核心关键能力——>高效能工作——>更多时间打磨自己的系统——>更高效能工作——>打磨下个层次工作的核心关键能力……

4、核心竞争力,是指你拥有的(独特的)知识经验组合,经过你思维逻辑的组织梳理,在实践中产生无可替代的价值。打造自己的TMS系统(T:专业技术;M:沟通管理、S:行业解决方案),利用复利效应,让系统为自己工作。

为什么初学者有时候无法理解设计模式?

因为没有遇到过问题,设计模式实际上是为了解决某种场景下的问题产生的优雅解决方案。

所以看了很多设计模式的书,由概念出发,反向举例子与人的认知方向正好冲突。

设计模式的学习,应该通过问题引出,学习者有了自己的实现之后,再去给出设计模式的实现,经过对比才会让学习者认识深刻,有一种思维上的爽快感!

并且,设计模式作为一种解决问题的模式工具,为什么每本设计模式书里面都要将类图画的那么复杂?

不应该掌握其解决问题的适用场景,如果到了使用的时候,再去翻看一下书看下怎么实现不就可以了吗?

大脑用来思考,不是用来存储。

中国话叫做:君子不器。

转入正题

先给一个结论:

桥梁模式,解决的是某个场景下,有多个维度分别演化的问题

首先来看一下两个问题:

问题1:发送通知场景

在工作开发中,经常遇到一个业务场景完成之后,需要发送多种通知,例如短信通知、邮件通知、微信通知、app通知……而通知分为一般通知、紧急通知等等,随着业务发展、科技发展,通知方式、通知类型都有可能发生变化。如何设计这个通知模块?

读者可以先思考一下自己如何实现。

我们首先进行维度分析(OOA)看一下一下场景描述。

这段描述里面有两个关键维度:通知类型、通知渠道。

维度1:通知类型,有可能是一般通知、紧急通知……

维度2:通知渠道,有可能包含短信、邮件、微信……

这两个维度,每一个都是有可能单独变化的。

而两者之间,有可能随意组合扩展,例如现在业务要求通过短信发送一般通知,而考虑到成本,后面也许将会变化成通过微信发送通知。

简单的类图如下,核心原理就是拆解成单一维度,然后统一组装,最大化的解耦:
在这里插入图片描述

问题2:适配多种协议类型请求报文场景

一个业务系统,一般需要与外部各种公司系统直连,例如对接蚂蚁金服、对接腾讯微信……

每一个外部系统的报文协议都不一样。

一种最初级的简陋方案是:每次都在web.xml中加上映射路径(或者controller中加入),每一个路径都特殊处理。

但是,这种复杂的变动情况,肯定不符合程序员的审美观。

面向对象开发的一个大原则就是:

封装变化

对于这种场景,再进行一下维度分析。

我们可以看到,一次请求也有两种维度:

通讯协议维度,例如HTTP、SOCKET、MQ……

报文协议维度,webservice的soap报文、json格式报文、xml格式报文、定长字段格式报文等等

而我们内部系统,通常有一个自己的统一模型(假设叫做:RequestMsg),我们要做的是要支持各种通讯协议、各种报文协议的组合变幻。

当然,如果企业内部有网关的话,这一层的转换处理可能是在网关进行处理了,业务系统只需要处理业务即可了。

对于此部分的桥接模式处理类图如下:

在这里插入图片描述

架构突围

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值