zoukankan      html  css  js  c++  java
  • SingleTon单例模式总结篇

    在Java设计模式中,单例模式相对来说算是比较简单的一种构建模式。适用的场景在于:对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象。

    一,懒汉式:

    其特点是延迟加载,即当需要用到此单一实例的时候,才去初始化此单一实例。

     1 public class SingleTon {
     2 
     3     // 静态实例变量
     4     private static SingleTon instance;
     5 
     6     // 私有化构造函数
     7     private SingleTon() {
     8 
     9     }
    10 
    11     // 静态public方法,向整个应用提供单例获取方式
    12     public static SingleTon getInstance() {
    13         if (instance == null) {
    14             instance = new SingleTon();
    15         }
    16         return instance;
    17     }
    18 
    19 }

    懒汉式线程安全

     1 public class SingleTon {
     2 
     3     // 静态实例变量加上volatile
     4     private static volatile SingleTon instance;
     5 
     6     // 私有化构造函数
     7     private SingleTon() {
     8 
     9     }
    10 
    11     // 双重检查锁
    12     public static SingleTon getInstance() {
    13         if (instance == null) {
    14             synchronized(Singleton.class){
    15                 if(singleton == null){
    16                     instance = new SingleTon();
    17                 }
    18             }
    19         }
    20         return instance;
    21     }
    22 
    23 }

    二,饿汉式:

    饿汉式的特点是应用中尚未需要用到此单一实例的时候即先实例化。

     1 public class SingleTon {
     2 
     3     // 静态实例变量,直接初始化
     4     private static SingleTon instance = new SingleTon();
     5 
     6     // 私有化构造函数
     7     private SingleTon() {
     8 
     9     }
    10 
    11     // 静态public方法,向整个应用提供单例获取方式
    12     public static SingleTon getInstance() {
    13         return instance;
    14     }
    15 
    16 }

    静态内部类单例模式

     1 public class SingleTon {
     2 
     3     // 利用静态内部类特性实现外部类的单例
     4     private static class SingleTonken{
     5         private static SingleTon singleTon = new SingleTon();
     6     }
     7 
     8     // 私有化构造函数
     9     private SingleTon() {
    10 
    11     }
    12 
    13     public static SingleTon getInstance() {
    14         return SingleTonken.singleTon;
    15     }
    16 
    17 }

    静态代码块单例模式

     1 public class SingleToken {       
     2     private static SingleToken singleTon;
     3         //私有化构造函数
     4     private SingleToken(){}
     5         //静态代码块
     6     static{
     7         singleTon = new SingleToken();
     8     }
     9     //获取实例化构造函数
    10     public static SingleToken getInstatce(){
    11         return singleTon;
    12     }
    13     
    14 }

    枚举单例模式

    1 public enum EnumSingleTon {
    2     INSTANCE;
    3     public static EnumSingleTon getInstance(){
    4         return INSTANCE;
    5     }
    6 }
  • 相关阅读:
    Linux下解析域名命令-dig 命令使用详解
    重写、覆盖、重载、多态几个概念的区别分析
    介绍python中运算符优先级
    介绍Python中6个序列的内置类型
    Mysql(Mariadb)数据库主从复制
    winscp中使用sudo的方法
    git push跳过用户名和密码认证配置教程
    案例:通过shell脚本实现mysql数据备份与清理
    毕业季,我的Linux求职之路
    PHP和ajax详解
  • 原文地址:https://www.cnblogs.com/suruozhong/p/6109561.html
Copyright © 2011-2022 走看看