设计模式综合总结
生产者消费者模型
- 线程间通信
- 中间用数据容器来解耦
- 一个放数据一个取数据
装饰模式
定义:动态地给对象添加一些额外的职责,就像是在墙上刷油漆,使用Decorator模式相比生成子类方式达到功能的扩充显得更为灵活.
为什么使用:我们通常使用继承来实现功能的扩展,如果这些需要扩展的功能种类繁多,那么势必生成很多子类,增加系统的复杂性;
同时,使用继承实现功能拓展,我们必须可以预见这些扩展功能,这些功能是编译时就确定了的,是静态的.
----理由是:这些功能需要由用户动态决定加入的方式和时机,.Decorator提供了"即插即用"的方法,也就是在运行期间决定何时增加何种功能.
代理模式
对目标对象进行功能的扩展.(jdk动态代理,cglib动态代理)
装饰模式和代理模式的区别
- 目的不同:
代理模式:(让原有对象被代理)为的是让使用者感受不到原有对象的动作和行为
装饰模式:(让原有对象被增强) - 重心不同:
代理模式:最终主要功能仍然由原有对象决定
装饰模式:最终主要功能由装饰对象决定
分层
分层的目的就是将复杂问题进行拆解,然后分而治之,进而提高系统的可扩展性以及可维护性
什么时候才会有cap原则
普通的单体项目用不到cap原则(高可用性和一致性,在一定程度上是互斥的)
这是因为当一个节点发生宕机,是没法实现一致性的C,然而可以实现高可用性A;
当一个节点想要实现高可用性A,那么就要发生宕机,则无法实现一致性c