摘要:总结 JDK中的unmodifiableList的构造函数是对原始集合的浅拷贝, 而Guava.ImmutableList.copyOf是对原始集合的深拷贝 public class ImmutableDemo { public static void main(String[] args) { L
阅读全文
摘要:一、场景引入 如果我们前期的微服务没有相关的服务治理功能,要对所有的微服务做一些升级该如何下手?主要包括服务治理:监视、日志记录、限流、熔断、服务注册、协议适配转换等。 下面介绍的边车模式就是很好解决该问题的一个方法之一。 二、什么是边车模式 边车模式也叫搭档模式、伴侣模式或跟班模式。生活中的原型就
阅读全文
摘要:总结 1.装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。 2.换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们
阅读全文
摘要:总结 什么情况下,适用于builder模式(建造者模式)? 当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。 为了避免构造函数的参数列表过长、不同的构造函数过多,我们一般有builder模式+setter方法两种解决方案。为何builder更胜一筹? sette
阅读全文
摘要:1.【不好的解法】只适用于单线程环境 缺陷:当两个线程同时执行到 if (instance == null) 时,两个线程均会创建一个实例 //只适用于单线程环境 public class Singleton{ //将无参构造函数私有化,避免外部自行初始化 private Singleton(){}
阅读全文
摘要:QA 动态代理是什么?有哪些应用? 动态代理是运行时动态生成代理类。 动态代理的应用有 spring aop、hibernate 数据查询、测试框架的后端 mock、rpc,Java注解对象获取等。 怎么实现动态代理? JDK 原生动态代理和 cglib 动态代理。 JDK 原生动态代理是基于接口实
阅读全文
摘要:参考 清幽之地 https://www.jianshu.com/p/3a3edbcd8f24 一、什么是SPI SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件
阅读全文
摘要:总结 该模式在父类中定义了一个“主流程方法Template Method”(或者称作骨架方法),主流程方法包含了许多空/非空的“子方法”。这些子方法(被称作钩子方法),可以被不同的子类实现自己独特的逻辑,但是又不破坏父类中的主流程方法逻辑。使得不同的子类中,“流程一致,具体逻辑不同”。 详细解析 假
阅读全文
摘要:总结 使用场景 把自己不会做的事情,交给专业的对象去做。和名字很类似。 关键点 发起委托的人,要持有一个真正做事情的对象的实例。 详细解析 比如,“买房”这个动作是一个接口/抽象类。 public interface BuyHouse{ public void buy(); } 有两个具体类“我自己
阅读全文
摘要:总结 何时使用 在不想增加很多子类的情况下扩展类时 优点 装饰类和被装饰类可以独立发展,而不会相互耦合。它有效地把类的核心职责和装饰功能分开了 装饰模式是继承关系的一个替代方案 装饰模式可以动态地扩展一个实现类的功能 详细解析 https://www.cnblogs.com/adamjwh/p/90
阅读全文