设计模式----单例模式

一、模式定义

  单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

二、分类

  (1)懒汉式:延迟加载方式。

  (2)饿汉式 :加载时就new出对象,线程安全,没有延时加载的优势。

三、代码实现

  1.饿汉式单例(立即加载,线程安全)

 1 public class SingletonDemo1 {
 2     private static SingletonDemo1 instance = new SingletonDemo1();
 3     
 4     private SingletonDemo1(){
 5     
 6     }
 7     
 8     public static SingletonDemo1 getInstance(){
 9         return instance;
10     }
11 }

  2.懒汉式单例(延迟加载,使用synchronized同步锁保证只能创建一个实例,但是会降低效率,下一个线程想要获取对象,就必须等待上一个线程释放锁之后,才可以继续运行。)

 1 public class SingletonDemo2 {
 2     private static SingletonDemo2 instance;
 3     private SingletonDemo2(){
 4     
 5     }
 6     
 7     public static synchronized SingletonDemo2 getInstance(){
 8         if(instance==null){
 9             instance = new SingletonDemo2();
10         }
11         return instance;
12     }
13 }

  3.双重检测锁式(将同步内容放入到if内部,由于编译器优化原因和JVM底层内部模型原因偶尔会出问题,不建议使用)

 

  4.静态内部类式(懒加载:一开始不会初始化静态内部类,只有调用getInstance()时才初始化,类加载过程中天然线程安全,调用效率高)

 1 public class SingletonDemo3 {
 2     private static class SingletonClassInstance{
 3         private static final SingletonDemo3 instance = new SingletonDemo3();
 4     }
 5     
 6     private SingletonDemo3(){
 7         
 8     }
 9     
10     public static SingletonDemo3 getInstance(){
11         return SingletonClassInstance.instance;
12     }
13 }

  5.枚举单例

 1 class Resource{
 2 }
 3  
 4 public enum SomeThing {
 5     INSTANCE;
 6     private Resource instance;
 7     SomeThing() {
 8         instance = new Resource();
 9     }
10     public Resource getInstance() {
11         return instance;
12     }
13 }

 

posted @ 2018-11-15 16:58  DXYE  阅读(114)  评论(0编辑  收藏  举报