1. 设计模式的六大原则
    1. 总原则-开闭原则
    2. 1、单一职责原则(SRP)
    3. 2、里氏替换原则(Liskov Substitution Principle)
    4. 3、依赖倒转原则(Dependence Inversion Principle)
    5. 4、接口隔离原则(Interface Segregation Principle)
    6. 5、迪米特法则(最少知道原则)(Demeter Principle)
    7. 6、合成复用原则(Composite Reuse Principle)
  2. 三大类
    1. 创建型
      1. 工厂方法模式
      2. 抽象工厂模式
      3. 单例模式
        1. 饿汉式
          1. /** * @author chenguangjian 饿汉式单例类.在类初始化时,已经自行实例化 * 饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。 */ public class SingletonHungeryMan { // 私有构造方法 private SingletonHungeryMan() { } final private static SingletonHungeryMan ins = new SingletonHungeryMan(); // 这地方直接用static实例变量的方式来保证单例 // 静态工厂方法,线程安全的 public static SingletonHungeryMan getInstance() { return ins; } }
        2. 线程不安全
          1. public class SingletonThreadNotSafe { private static SingletonThreadNotSafe singleton = null; // Singleton通过将构造方法限定为private避免了类在外部被实例化 private SingletonThreadNotSafe() { } public static SingletonThreadNotSafe getInstance() { if (singleton == null) { singleton = new SingletonThreadNotSafe(); } return singleton; } }
        3. 线程安全
          1. /** * */ package design.pattern.singleton; /** * @author chenguangjian * 这种方式的实现对于线程来说并不是安全的,因为在多线程的环境下有可能得到Singleton类的多个实例。如果同时有两个线程去判断 * (instance == * null),并且得到的结果为真,这时两个线程都会创建类Singleton的实例,这样就违背了Singleton模式的原则 。 * * 实际上在上述代码中,有可能在计算出表达式的值之前,对象实例已经被创建,但是内存模型并不能保证对象实例在第二个线程创建之前被发现。 * 该实现方式主要有两个优点: 由于实例是在 Instance * 属性方法内部创建的,因此类可以使用附加功能(例如,对子类进行实例化),即使它可能引入不想要的依赖性。 * 直到对象要求产生一个实例才执行实例化;这种方法称为"惰性实例化"。惰性实例化避免了在应用程序启动时实例化不必要的 singleton。 */ public class SingletonThreadSafe { private static SingletonThreadSafe singleton = null; // Singleton通过将构造方法限定为private避免了类在外部被实例化 private SingletonThreadSafe() { } /** * 线程安全的 * * @return */ public static synchronized SingletonThreadSafe getInstance() { // 这样写依然是线程不安全的,当多线程环境下,有可能返回null if (singleton == null) { singleton = new SingletonThreadSafe(); } return singleton; } /** * 双重检查锁定,线程安全的 * * @return */ public static synchronized SingletonThreadSafe getInstance2() { if (singleton == null) { synchronized (SingletonThreadSafe.class) { if (singleton == null) { singleton = new SingletonThreadSafe(); } } } return singleton; } }
      4. 生成器(建造者)模式
        1. “遇到多个构造器参数时要考虑用构建器
      5. 原型模式
    2. 结构型
      1. 适配器
      2. 装饰器
      3. 代理
      4. 外观
      5. 桥接
      6. 组合
      7. 享元
    3. 行为型
      1. 策略
      2. 模板方法
      3. 观察者
      4. 迭代子
      5. 责任链
      6. 命令
      7. 备忘录
      8. 状态
      9. 访问者
      10. 中介者
      11. 解释器
    4. 并发型模式
    5. 线程池模式