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