1、设计模式的初衷是什么?有哪些设计原则? {#1设计模式的初衷是什么有哪些设计原则}
- 开闭原则
- 依赖倒置原则
- 单一职责原则
- 接口隔离原则
- 迪米特原则
- 里氏替换原则
- 合成复用原则
2、列举至少4种单例模式被破坏的场景并给出解决方案 {#2列举至少4种单例模式被破坏的场景并给出解决方案}
-
多线程
解决办法:
-
改写DCL双重锁的写法
-
使用静态内部类的写法
-
-
指令重排
解决办法:加volite关键字
-
克隆
解决办法:在单例对象中重写clone()方法
-
反序列化
解决方案:反序列化的时候重新readResolve()方法,将返回值设置为单例对象
-
反射
解决方法:
- 在构造方法中检查单例对象,如果已构建则抛出异常
- 将单例的实现方式改为枚举式单例
3、一句话总结单例模式、原型模式、建造者模式、代理模式、策略模式和责任链模式 {#3一句话总结单例模式原型模式建造者模式代理模式策略模式和责任链模式}
-
单例模式:世界上只有一个Tom
-
原型模式:拔一根猴毛,吹出千万个
-
建造者模式:高配中配与低配,相选哪配就哪配
-
代理模式:没有资源没有时间,得找媒婆来帮忙
-
策略模式:条条大路通北京,具体哪条你来定
-
责任链模式:各人自扫门前雪,莫管他人瓦上霜