vlambda博客
学习文章列表

【每日一题】Dubbo源码使用了哪些设计模式

A、工厂模式。ExtenstionLoader.getExtenstionLoader(Protocol.class).getAdaptiveExtenstion()

B、装饰器模式+责任链。以provider的调用链为例,具体调用链代码是在protocolFilterWrapper的buildInvokeChain完成的,将注解中含有group=provider的Filter实现,调用顺序为EchoFilter -> ClassLoaderFilter -> GenericFilter -> ContextFilter -> ExceptionFilter -> TimeoutFilter -> MonitorFilter -> TraceFilter。装饰器模式和责任链混合使用,Echo是回声测试请求,ClassLoaderFilter则只是在其主功能上添加了功能。

C、观察者模式。provider启动时需要与注册中心交互,先注册自己的服务,再订阅自己的服务,订阅时采用了观察者模式,注册中心每5s定时检查是否有服务更新,有更新则向服务提供者发送1个notify消息后即可运行NotifyListener的notity方法,执行监听器方法。

D、动态代理模式。扩展JDK的ExtensionLoaderdeAdaptive实现,根据调用阶段动态参数决定调用哪个类,生成代理类的代码是ExtensionLoader的createAdaptiveExtenstionClassLoader方法。



劝学警言

身处信息爆炸时代,知识浩瀚如海洋。

然,如同图书馆,你可以入门,但不代表你就拥有它。

且,学而不思则罔,思而不学则殆;

学贵有恒,更需注重方式方法。切记三字箴言:恒、慢、悟——

恒:坚持不懈!最忌讳的就是三天打鱼两天晒网,一曝十寒;

慢:精雕细琢!慢工出细活,理论知识一定要吃透,知其所以然;

悟:明辨慎思!要善于固化知识,一定要有自己的理解,否则就如同将他人吐在地上的吃过的甘蔗,再捡起来嚼,味同嚼蜡一般,无任何滋味可言。

送君一句话:殚精竭虑,不如须臾之所学也。

愿君,好好学习,天天向上!

共勉之!