首页 > 其他 > 详细

23种设计模式(更新中)

时间:2020-03-03 16:11:12      阅读:67      评论:0      收藏:0      [点我收藏+]

设计模式

单例模式

饿汉式

  1. 使对象私有化

  2. 类初始化的时候立即加载该对象

  3. 提供获取该对象的方法,没有sysnchronized,效率高

1.

private T07(){
?
}

2.

private static T07 instance=new T07();

3.

public static T07 getInstance(){
   return instance;
}

缺点,如果开辟空间,将造成空间浪费,不管用到没有都会开辟空间。不能延时加载

优点:线程安全,调用效率高

懒汉式

  1. 私有化构造器

  2. 类初始化的时候不立即加载该对象

  3. 有sysnchronized,效率不高

1.

private T08(){
?
}

2.

private static T08 instance;

3.

public static synchronized T08 getInstance(){
   if (instance==null){
       instance=new T08();
  }
   return instance;

优点:线程安全,可以延时加载

缺点:调用效率不高

DCL懒汉式

把锁的位置变了,不建议使用,极端情况容易出错

private T09(){
?
}
private static T09 instance;
?
public static  T09 getInstance(){
   if (instance==null){
       synchronized (T09.class) {
           instance = new T09();
      }
  }
   return instance;
}

饿汉式改进

线程安全,且用final保证只有一个实例存在

private T10(){};
private static class InnerClass{
   private static final T10 instance=new T10();
}
public static T10 getInstance(){
   return InnerClass.instance;
}

反射可以破话任何单例模式

改进:1,监测对象是否被创建

private T09(){
   synchronized (T09.class){
       if (instance!=null){
           throw new RuntimeException("不要试图用反射破坏单例模式");
      }
  }
}

2.进一步改进,已经很安全了 不过反射还可以破坏boolean的值

private static boolean flag=false;
private T09(){
?
   synchronized (T09.class){
       if (flag=false){
           flag=true;
      }
       else {
           throw new RuntimeException("不要试图用反射破坏单例模式");
      }
  }
}

枚举单例

简单高效安全

public enum T11 {
   INSTANCE;
   public T11 getInstance(){
       return INSTANCE;
  }
}

23种设计模式(更新中)

原文:https://www.cnblogs.com/ltdh/p/12402347.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!