引言:好的Code总是出奇的像,坏的Code也是出奇的像,这篇文章,我不会贴代码,尽量用自己的理解表达这些模式的含义,在类与类之前的关系表达上,可尽量使用这些模式。
偏门的就不记了,记录下工作中应用最最最广泛的一些模式,在代码呼之欲出的时候,可以考虑下,我们应当如何组织Class,如何在增加新功能的时候,可以不修改原有Class,或者修改很少,我们应该拥抱开闭原则,做到代码低耦合,高内聚,这就需要使用下面的一些个思维模式。
确保在当前应用实例(进程,fork除外)中,仅仅存在一个实例,特别针对连接池,线程池,工厂类,配置类等这些hold大量资源的类必须单例。
业务逻辑需要经过一系列的处理逻辑流才能有结果,每个逻辑流相互独立,那么,非常适合使用职业链,相同的Contex经过不同的链条处理,职业链的触发方式一般有两种
Tomcat的Filter,servicecomb的Filter,mvc的Hander,aop的intercepter,这些职业链都是使用递归调用,详情可以见部分开源源代码。针对aop,递归的形式非常适合表达before,around,after的语义,可以想想dfs前后的逻辑区别。
懒得贴代码了。
Spring的EventBus,Apollo的配置变更通知等,非常适合工程中模块与模块的接藕。当某个类A的状态变更,需要通知另外一个类B,则B需要实现的A的观察接口类,然后注册到A上,在A变化的时候,A主动调用对应的观察者列表。
Spring 实现了简单的事件总线,状态类使用总线发布事件类的时候,会根据ClassType找到全部监听当前事件的类,然后同步或者异步通过反射调用这些类的方法。
业务代码可简单使用接口,实现监听者模式。