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