设计模式之单例模式

设计模式之单例模式

什么是单例模式?

单例模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

如何实现?

懒汉式单例:

将构造函数设置为private,同时设置一个getInstance()用来获取实例。

懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间

Singleton.java

 1 package singleton01;
 2 
 3 public class Singleton {
 4     private static Singleton singleton;
 5     private Singleton(){
 6         
 7     }
 8     
 9     public static Singleton getInstance() {
10         if (singleton == null) {
11             singleton= new Singleton();
12         }
13         return  singleton;
14     }
15 }
Singleton.java

Main.java 测试类

 1 package singleton01;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Singleton singleton=Singleton.getInstance();
 6         Singleton singleton2=Singleton.getInstance();
 7         System.out.println(singleton==singleton2);
 8                 
 9     }
10 }
Main


但是以上并未考虑到线程安全的问题,线程不安全。需将其进行同步操作。

 同步情况代码如下:

 1 package per.zww.design;
 2 
 3 /**
 4  * 懒汉型单例模式
 5  * 
 6  * @author zhaoww
 7  *
 8  */
 9 public class Singleton {
10     private static Singleton singleton=null;
11     private Singleton(){
12     }
13     
14     public static Singleton getinstance() {
15         // TODO Auto-generated method stub
16         if (singleton==null) {
17             synchronized (Singleton.class) {
18                 if (singleton == null) {
19                     singleton=new Singleton();
20                 }
21             }
22         }
23         return singleton;
24     }
25 }
Singleton

饿汉式单例:

饿汉式单例类 在类初始化时,已经自行实例。

饿汉式是典型的空间换时间,当类装载的时候就会创建类的实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断,节省了运行时间。

Singleton1.java

 1 public class Singleton1 {
 2 
 3     private Singleton1() {}
 4    
 5     private static final Singleton1 single = new Singleton1();
 6     
 7     public static Singleton1 getInstance() {
 8         return single;
 9     }
10 }
Singleton1.java

登记式单例:未使用

初学《大话设计模式》

原文地址:https://www.cnblogs.com/zhaoww/p/5082401.html