码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2018-08-16 01:08:09      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:序列化   zed   bsp   单例   种类型   最简   自己   pat   mem   

  

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。

 

  1. 双重检查DCL
     1 public class Man {
     2     //DCL单例模式
     3     private static Man man = null;
     4 
     5     private Man() {
     6         //限制实例化
     7     }
     8 
     9     public static Man getInstance(){
    10         if (null == man){
    11             synchronized (man){
    12                 if (null == man){
    13                     //DoubleCheck 双重检查
    14                     man = new Man();
    15                 }
    16             }
    17         }
    18         return man;
    19     }
    20 }

     

  2. 使用枚举实现
     1 public enum  Singleton {
     2     //实现单例模式最简单、最佳的方法。自动支持序列化机制
     3     INSTANCE;
     4 
     5     public void noNameMethod(){
     6         //whatever
     7     }
     8 
     9     public static void main(String[] args) {
    10         Singleton instance = Singleton.INSTANCE;
    11         instance.noNameMethod();
    12     }
    13 
    14 }

     

  3. 饿汉式单例(直接实例化)
     1 public class  Singleton {
     2 
     3     //饿汉式,线程安全。可能会产生垃圾对象
     4     private static Singleton singleton = new Singleton();
     5 
     6     private Singleton(){}
     7 
     8     public static Singleton getInstance(){
     9         return singleton;
    10     }
    11 
    12 }

     

  4. 懒汉式(线程不安全)
     1 public class Singleton {  
     2     private static Singleton instance;  
     3     private Singleton (){}  
     4   
     5     public static Singleton getInstance() {  
     6     if (instance == null) {  
     7         instance = new Singleton();  
     8     }  
     9     return instance;  
    10     }  
    11 }

     

  5. 懒汉式(线程安全)
     1 public class Singleton {  
     2     private static Singleton instance;  
     3     private Singleton (){}  
     4     public static synchronized Singleton getInstance() {  
     5     if (instance == null) {  
     6         instance = new Singleton();  
     7     }  
     8     return instance;  
     9     }  
    10 }

     

单例模式

标签:序列化   zed   bsp   单例   种类型   最简   自己   pat   mem   

原文地址:https://www.cnblogs.com/dzyls/p/9484303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!