设计模式在很早之前有明确的定义,使用意图,场景;
但是在现代的很多编程语言中,就内置的设计模式,比如C#的事件、委托特性,就是观察者模式的体现;
现在的前端框架Vue,整个Model就是依靠Object对象,拦截方法set,然后通知视图更新;React生态里有个状态管理框架Mobx,都是用观察者模式实现的,每个class的属性加上Observable,就可以让属性可观察,View里加上Observer装饰器,这样,当observable的属性改变后,View就会自动分析该不该更新视图,这都是观察者模式的体现;
又比如JavaScript/Typescript中的装饰器Decorator,层层包裹function,还有Python的Decorator,这是装饰器的体现;
又如Java的动态代理,这其实就是代理模式,Spring框架的AOP面向切面编程,拦截方法的调用,然后扩展逻辑,再决定是否要调用原来的逻辑;更有底层的CGLib,直接动态生成字节码类;很方便扩展逻辑;但对于使用者是无感知的;
最后,其实我一直都觉得设计模式没有固定的使用方式,只要能达到设计者的目的,可以灵活组合使用;而且不一定要像GoF定义的那样,必须得要有这个接口,那个接口,这个抽象那个抽象,没有必要的;只要达到目的,写出高内聚低耦合、可扩展、可维护的代码就可以了;
我觉得,可维护的代码才是牛逼的。
网友评论