1 代理模式和装饰模式的区别
在装饰器模式和代理模式之间还是有很多差别的。装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。
使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。
2 在工作中用到哪些设计模式?
设计模式是程序员在设计过程中多年的最佳实践沉淀, 可以提高工程师之间的研发质量, 沟通效率.
工作中,我研发的SaaS系统模块中使用了模板方法模式
场景:
我们的风控系统,既需要对接其它渠道的接口,也需要将接口提供给别人(如登录,充值). 每个渠道的登录和充值接口的实现都是不太一样的. 而SaaS作为接入的服务平台,需要保证接入的一致性,以及消除到不同平台的差异性.
使用模板方法模式之后:
- 固定了接入的流程:都有登录和充值…
- 解耦了协议和实现:每个渠道按照对应的对接协议差别的接入,在上层抹掉差异
- 扩展性好,可以轻松的增加新渠道;
在优化登录代码的时候,使用了观察者模式(具体是通过Guava提供的EventBus)
之前的登录代码是面条式的,一行代码处理一个对应的逻辑,比如,登录完成之后,记录日志,通知积分服务增加积分,通知统计服务增加登录次数,变更日活;
使用观者模式之后,发一个登录成功的消息,在监听者中处理不同的逻辑操作。简化了代码,可维护性,可扩展性得到了提高。
3 JDK 和 Spring中用到的设计模式
JDK
- 装饰器模式:java.io中的流处理;
- 建造者模式:Http2/client的构建;
- 单例模式: Runtime类, 单例模式主要在高并发的情况下,需要加入双检锁,或者直接使用枚举单例的方式。
Spring
- 工厂模式: BeanFactory, ApplicationContext中的对象创建;
- 观察者模式: 各种事件的发布和通知
- 模板模式: JdbcTemplate
- AOP: 综合了代理,装饰器,适配器模式
未完待续