博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1、单例模式(饿汉/懒汉)
阅读量:5933 次
发布时间:2019-06-19

本文共 1281 字,大约阅读时间需要 4 分钟。

在我们平常的开发过程中会用到很多设计模式,最近准备一一整理出来,后续会不断的更新!  先写一个最最见的的单例模式吧!

 

单例模式:控制一个类在内存中只存在一个实例。

实现步骤:

            1、私有化构造方法,使外部不能直接建立实例对象

            2、在本类内部创建私有化一个本类实例对象

            3、提供一个static方法,返回本类实例化对象,供外部直接调用

 

单例模式一般分两种:饿汉式和懒汉式

        1、饿汉式:(不管使用与否直接创建实例对象)

  1. public class Singleton{
  2.     //1私有化构造方法
  3.     private Singleton(){
  4.     }
  5.    
  6.     //创建本类实例对象,这里必须为static类型,可以被static方法调用
  7.     private static Singleton singleton = new Singleton();
  8.     //提供获取本类实例的方法,应为外部不能建立本类实例,所以写static方法可以用类名直接调用
  9.     public static Singleton getSingleton(){
  10.         return singleton;
  11.     }
  12.  }

    

        2、懒汉式(等需要使用的时候才去创建)

 

  1. public class Singleton{
  2.     private Singleton(){
  3.     }
  4.    private Static Singleton singleton = null;
  5.    
  6.    public static getSingleton(){
  7.        if(singleton == null){
  8.            singleton = new Singleton();
  9.        }
  10.        return Singleton;
  11.   }
  12. }

说明:懒汉式是线程不安全的。

 

-----

当然,单例模式深入的研究,也不止这些,还会有如何解决线程不安全问题,并且怎么保证效率比较高,这些会用到锁的概念,这些可以到网上找找别的博客看看。 

 ----线程安全的单列模式:(双重检查)

  1. public class MySingleton {  
  2.       
  3.     //使用volatile关键字保其可见性  
  4.     volatile private static MySingleton instance = null;  
  5.       
  6.     private MySingleton(){}  
  7.        
  8.     public static MySingleton getInstance() {  
  9.         try {    
  10.             if(instance != null){
    //懒汉式   
  11.                   
  12.             }else{  
  13.                 //创建实例之前可能会有一些准备性的耗时工作   
  14.                 Thread.sleep(300);  
  15.                 synchronized (MySingleton.class) {  
  16.                     if(instance == null){
    //二次检查  
  17.                         instance = new MySingleton();  
  18.                     }  
  19.                 }  
  20.             }   
  21.         } catch (InterruptedException e) {   
  22.             e.printStackTrace();  
  23.         }  
  24.         return instance;  
  25.     }  
  26. }  

        

 

转载于:https://www.cnblogs.com/guoliangxie/p/5283543.html

你可能感兴趣的文章
关于System.Collections空间
查看>>
python学习笔记之——python面向对象
查看>>
Sara Cope关于text-shadow的介绍
查看>>
【转载】两军问题与Paxos算法 & 动画讲解Paxos算法
查看>>
外排序 & 败者树 & 多路归并-学习
查看>>
font-family 定义的最后为什么要加一句sans-serif
查看>>
IoC和DI的基本概念的思维导图
查看>>
LDA 初见(JGibbLDA-v.1.0 eclipse使用)
查看>>
xargs命令
查看>>
PHP解决约瑟夫环问题
查看>>
网页中的上标和下标实现
查看>>
Windows 08R2 IIS网站架设
查看>>
数据库 出现 Duplicate column name '****'
查看>>
Codeforces 14D
查看>>
A+B
查看>>
深度优先迷宫求解实例(C)
查看>>
并发异步处理队列 .NET 4.5+
查看>>
软件工程概论作业三——四则运算三
查看>>
js中的正则表达式
查看>>
构造函数细解
查看>>