单例设计模式

  单例模式是Java23种设计模式中最简单的设计模式之一,今天我们就详细讲解一下单例设计模式。

  

  单例模式指的是在实例化对象时,只实例化一次。比如在jdbc中,实例化多个jdbc 连接会极大的占用资源,所以我们在设计程序时考虑到只实例化一个jdbc的对象,这样就能避免实例化多个对象时的尴尬。具体设计方法:

  

 1 package com.devin.learning0612;
 2 
 3 public class Singleton {
 4     private static Singleton instence = new Singleton();
 5     private Singleton(){
 6         System.out.println("单例模式");
 7     }
 8     public static Singleton getSingleton(){
 9         return instence;
10     }
11 
12 
13 }
14 class Demo{
15     public static void main(String[] args) {
16 //        Singleton s = new Singleton();
17         Singleton s = Singleton.getSingleton();
18     }
19 }

  在第五行,通过构造方法私有化使类只能在类内部被实例化,在第4行,通过静态私有化实例化本类,再通过接口完成对对象的调用。

  上述代码是饿汉式的单例模式,这种模式无论对象是否被调用,都会实例化一个对象出来,这样做可能会占用资源,但这样做是线程安全的,下面是懒汉式单例模式

 1 public class Singleton {
 2     private static Singleton instence = null;
 3     private Singleton(){
 4         System.out.println("单例模式");
 5     }
 6     public static Singleton getSingleton(){
 7         if(instence == null)
 8             instence = new Singleton();
 9         return instence;
10     }
11 
12 
13 }
14 class Demo{
15     public static void main(String[] args) {
16 //        Singleton s = new Singleton();
17         Singleton s = Singleton.getSingleton();
18     }
19 }

  懒汉式在接口被调用时,再实例化,这样保证了不会被浪费资源,但这样做是线程不安全的,若有多个线程同时调用这个对象,很可能造成实例化冲突,变为以下形式便可解决

  

 1 public class Singleton {
 2     private static Singleton instence = null;
 3     private Singleton(){
 4         System.out.println("单例模式");
 5     }
 6     public static synchronized Singleton getSingleton(){
 7         if(instence == null)
 8             instence = new Singleton();
 9         return instence;
10     }
11 
12 
13 }
14 class Demo{
15     public static void main(String[] args) {
16 //        Singleton s = new Singleton();
17         Singleton s = Singleton.getSingleton();
18     }
19 }

 

posted on 2019-06-13 10:42  笔π  阅读(114)  评论(0编辑  收藏  举报

导航