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 }
  • 相关阅读:
    消息中间件(一)MQ详解及四大MQ比较
    SIP协议
    PAT (Basic Level) Practice 1008 数组元素循环右移问题
    LeetCode-Algorithms 1. 两数之和
    PAT (Basic Level) Practice 1040 有几个PAT
    PAT (Basic Level) Practice 1023 组个最小数
    PAT (Basic Level) Practice 1021 个位数统计
    PAT (Basic Level) Practice 1007 素数对猜想
    PAT (Basic Level) Practice 1006 换个格式输出整数
    PAT (Basic Level) Practice 1004 成绩排名
  • 原文地址:https://www.cnblogs.com/suruozhong/p/6109561.html
Copyright © 2011-2022 走看看