单列模式

Posted 哈喽叮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单列模式相关的知识,希望对你有一定的参考价值。

单列模式

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

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

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

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

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

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

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

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

    三、代码示例

        1、懒汉模式

package com.singleton;
/**
* 单列模式,懒汉模式,在第一次请求的时候创建实例,并且第一次创建实例后就不能在创建该实例
* @author Administrator
*
*/
public class Singleton1 {
//创建一个私有的静态变量
private static Singleton1 singleton1 = null;
//创建一个私有的构造方法
private Singleton1(){

}
//创建一个共有的静态方法,并返回该实例
public static Singleton1 getSingleton(){
if(singleton1 == null){
singleton1 = new Singleton1();
System.out.println("创建一个Singleton实例");
}else{
System.out.println("已经创建Singletong实例了,不能再创建");
}
return singleton1;
}
//测试
public static void main(String[] args) {
//测试懒汉模式
Singleton1 s = Singleton1.getSingleton();
System.out.println("第一次--->" + s);
System.out.println("第二次--->" + Singleton1.getSingleton());
System.out.println("第三次--->" + Singleton1.getSingleton());
}

}

 

2、饿汉模式

package com.singleton;
/**
* 单列模式,饿汉模式,类加载的时候就创建实例
* @author Administrator
*
*/
public class Singleton2 {
//创建私有的静态变量,并创建实例
private static Singleton2 singleton2 =new Singleton2();
//创建私有的构造方法
private Singleton2(){
System.out.println("构造函数执行了");
}
//创建一个共有的静态方法,并返回实例
public static Singleton2 getSingleton2(){
return singleton2;
}

//测试饿汉模式
public static void main(String[] args) {
Singleton2 s2 = Singleton2.getSingleton2();
System.out.println(s2);
System.out.println(Singleton2.getSingleton2());
System.out.println(Singleton2.getSingleton2());
}
}

 

3、双重锁模式

package com.singleton;
/**
* 单列模式,双重锁模式
* @author Administrator
*
*/
public class Singleton3 {
//创建一个私有的静态变量
private static Singleton3 singleton3 = null;
//创建一个私有的构造方法
private Singleton3(){
System.out.println("构造函数开始!");
}
//创建一个公有的静态方法,并返回实例
public static synchronized Singleton3 getSingleton3(){
if(singleton3 == null){
synchronized (Singleton3.class) {
if(singleton3 == null){
singleton3 = new Singleton3();
}
}
}
return singleton3;
}

//测试双重锁模式
public static void main(String[] args) {
Singleton3 s3 = Singleton3.getSingleton3();
System.out.println(s3);
System.out.println(Singleton3.getSingleton3());
System.out.println(Singleton3.getSingleton3());

}
}

以上是关于单列模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式: 单列设计模式 模块方法设计模式

创建类设计模式-单列模式.py

单列模式

单列模式

JS设计模式——单列模式

Java单列模式