zoukankan      html  css  js  c++  java
  • 单列模式

    单列模式

        一、单列模式有:懒汉模式、饿汉模式、双重锁模式

            1、懒汉模式:在第一次请求的时候才创建实例,并且第一次创建后就不能再创建该实例

            2、饿汉模式:在类加载的时候就创建实例

            3、双重锁模式:双重锁模式其实就是懒汉模式的双重锁模式,也是三种模式中效率最高的模式

     二、创建单列模式的步骤:

            1、创建一个私有的静态变量

            2、创建一个私有的构造方法

            3、创建一个公有的静态方法,并返回实例

        三、代码示例

    1、懒汉模式

     1 package com.singleton;
     2 /**
     3 * 单列模式,懒汉模式,在第一次请求的时候创建实例,并且第一次创建实例后就不能在创建该实例
     4 * @author Administrator
     5 *
     6 */
     7 public class Singleton1 {
     8     //创建一个私有的静态变量
     9     private static Singleton1 singleton1 = null;
    10     //创建一个私有的构造方法
    11     private Singleton1(){
    12 
    13     }
    14     //创建一个共有的静态方法,并返回该实例
    15     public static Singleton1 getSingleton(){
    16         if(singleton1 == null){
    17             singleton1 = new Singleton1();
    18             System.out.println("创建一个Singleton实例");
    19         }else{
    20             System.out.println("已经创建Singletong实例了,不能再创建");
    21         }
    22         return singleton1;
    23     }
    24     //测试
    25     public static void main(String[] args) {
    26         //测试懒汉模式
    27         Singleton1 s = Singleton1.getSingleton();
    28         System.out.println("第一次--->" + s);
    29         System.out.println("第二次--->" + Singleton1.getSingleton());
    30         System.out.println("第三次--->" + Singleton1.getSingleton());
    31     }
    32 }

    2、饿汉模式

     1 package com.singleton;
     2 /**
     3 * 单列模式,饿汉模式,类加载的时候就创建实例
     4 * @author Administrator
     5 *
     6 */
     7 public class Singleton2 {
     8     //创建私有的静态变量,并创建实例
     9     private static Singleton2 singleton2 =new Singleton2();
    10     //创建私有的构造方法
    11     private Singleton2(){
    12         System.out.println("构造函数执行了");
    13     }
    14     //创建一个共有的静态方法,并返回实例
    15     public static Singleton2 getSingleton2(){
    16         return singleton2;
    17     }
    18 
    19     //测试饿汉模式
    20     public static void main(String[] args) {
    21         Singleton2 s2 = Singleton2.getSingleton2();
    22         System.out.println(s2);
    23         System.out.println(Singleton2.getSingleton2());
    24         System.out.println(Singleton2.getSingleton2());
    25     }
    26 }

    2、双重锁模式

     1 package com.singleton;
     2 /**
     3 * 单列模式,双重锁模式
     4 * @author Administrator
     5 *
     6 */
     7 public class Singleton3 {
     8     //创建一个私有的静态变量
     9     private static Singleton3 singleton3 = null;
    10     //创建一个私有的构造方法
    11     private Singleton3(){
    12         System.out.println("构造函数开始!");
    13     }
    14     //创建一个公有的静态方法,并返回实例
    15     public static synchronized Singleton3 getSingleton3(){
    16         if(singleton3 == null){
    17             synchronized (Singleton3.class) {
    18                 if(singleton3 == null){
    19                     singleton3 = new Singleton3();
    20                 }
    21             }
    22         }
    23         return singleton3;
    24     }
    25 
    26     //测试双重锁模式
    27     public static void main(String[] args) {
    28         Singleton3 s3 = Singleton3.getSingleton3();
    29         System.out.println(s3);
    30         System.out.println(Singleton3.getSingleton3());
    31         System.out.println(Singleton3.getSingleton3());
    32     }
    33 }
  • 相关阅读:
    Apache 配置多站点访问「为项目分配二级域名」
    php封装的mysqli类完整实例
    PHP实现链式操作的三种方法详解
    php实现简单链式操作mysql数据库类
    PHP PDO_MYSQL 链式操作 非链式操作类
    23个数据库常用查询语句
    微信小程序表单弹窗实例
    ES6 && ECMAScript2015 新特性
    ES6新语法概览
    sql将两个日期之间的日子全列出来
  • 原文地址:https://www.cnblogs.com/j120zjb/p/8442171.html
Copyright © 2011-2022 走看看