1、设计模式的初衷是什么?有哪些设计原则?

  • 开闭原则
  • 依赖倒置原则
  • 单一职责原则
  • 接口隔离原则
  • 迪米特原则
  • 里氏替换原则
  • 合成复用原则

2、列举至少4种单例模式被破坏的场景并给出解决方案

  • 多线程

    解决办法:

    • 改写DCL双重锁的写法

    • 使用静态内部类的写法

  • 指令重排

    解决办法:加volite关键字

  • 克隆

    解决办法:在单例对象中重写clone()方法

  • 反序列化

    解决方案:反序列化的时候重新readResolve()方法,将返回值设置为单例对象

  • 反射

    解决方法:

    • 在构造方法中检查单例对象,如果已构建则抛出异常
    • 将单例的实现方式改为枚举式单例

3、一句话总结单例模式、原型模式、建造者模式、代理模式、策略模式和责任链模式

  • 单例模式:世界上只有一个Tom

  • 原型模式:拔一根猴毛,吹出千万个

  • 建造者模式:高配中配与低配,相选哪配就哪配

  • 代理模式:没有资源没有时间,得找媒婆来帮忙

  • 策略模式:条条大路通北京,具体哪条你来定

  • 责任链模式:各人自扫门前雪,莫管他人瓦上霜