设计模式java——单例模式
2023-09-11 14:16:28 时间
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式Demo:
/**
* 2018年4月4日下午8:53:13
*/
package com.Designpattern;
/**
* @author xinwenfeng
*
*/
public class TestSingleton {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("===========1============");
MySingleton1 singleton1 = MySingleton1.getSingleton();
System.out.println(singleton1);
MySingleton1 _singleton1 = MySingleton1.getSingleton();
System.out.println(_singleton1);
System.out.println("===========2============");
MySingleton2 singleton2 = MySingleton2.getSingleton();
System.out.println(singleton2);
MySingleton2 _singleton2 = MySingleton2.getSingleton();
System.out.println(_singleton2);
System.out.println("===========3============");
MySingleton3 singleton3 = MySingleton3.getSingleton();
System.out.println(singleton3);
MySingleton3 _singleton3 = MySingleton3.getSingleton();
System.out.println(_singleton3);
System.out.println("===========4============");
MySingleton4 singleton4 = MySingleton4.getSingleton();
System.out.println(singleton4);
MySingleton4 _singleton4 = MySingleton4.getSingleton();
System.out.println(_singleton4);
System.out.println("===========5============");
MySingleton5 singleton5 = MySingleton5.getSingleton();
System.out.println(singleton5);
MySingleton5 _singleton5 = MySingleton5.getSingleton();
System.out.println(_singleton5);
System.out.println("===========6============");
MySingleton6 singleton6 = MySingleton6.SINGLETON;
singleton6.show();
}
}
//懒汉式,线程不安全
class MySingleton1{
private MySingleton1() {System.out.println("构造一个1");};//私有构造方法
private static MySingleton1 singleton;
public static MySingleton1 getSingleton() {
if(null == singleton) {
singleton = new MySingleton1();
}
return singleton;
}
}
//懒汉式,线程安全
class MySingleton2{
private MySingleton2() {System.out.println("构造一个2");};//私有构造方法
private static MySingleton2 singleton;
public synchronized static MySingleton2 getSingleton() {//每次都锁,效率低
if(null == singleton) {
singleton = new MySingleton2();
}
return singleton;
}
}
//双重检查锁,线程安全
class MySingleton3{
private MySingleton3() {System.out.println("构造一个3");};//私有构造方法
private static MySingleton3 singleton;
public static MySingleton3 getSingleton() {
if(null == singleton) {
synchronized (MySingleton3.class) {//只有为null的时候才锁,效率提高
if(null == singleton) {
singleton = new MySingleton3();
}
}
}
return singleton;
}
}
//饿汉式,线程安全
class MySingleton4{
private MySingleton4() {System.out.println("构造一个4");};//私有构造方法
private static MySingleton4 singleton = new MySingleton4();//加载类时就创建
public synchronized static MySingleton4 getSingleton() {
return singleton;
}
}
//静态内部类
class MySingleton5{
private MySingleton5() {System.out.println("构造一个5");};//私有构造方法
private static class SingletonInner{
private static MySingleton5 singleton = new MySingleton5();
}
public synchronized static MySingleton5 getSingleton() {
return SingletonInner.singleton;//调用时才创建,懒加载
}
}
//枚举类(最优)
enum MySingleton6{
SINGLETON;
public void show() {
System.out.println("枚举最好用的单例模式");
};
}
结果:
相关文章
- 安卓逆向_17 --- IDA 动态调试【 环境搭建、so库调试【动态普通、动态debug模式】、JNI_OnLoad调试分析、java_ 开头函数分析】
- Java描述设计模式(24):备忘录模式
- Java描述设计模式(05):原型模式
- 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
- Win10 JAVA安装及环境搭建(windows jdk,windows java环境配置)
- 设计模式java——迭代器模式
- 【Java实习生】面试常问设计模式——单例模式
- 初学Java常用设计模式之——装饰器模式
- 初学Java常用设计模式之——单例模式
- java.lang.OutOfMemoryError: Java heap space
- Java打印输出:java天龙八部私服
- Java 设计模式:代理、适配器、桥接、装饰、外观、享元、组合模式
- Java设计模式之创建型:工厂模式详解(简单工厂+工厂方法+抽象工厂)
- Java设计模式之创建型:单例模式
- Java设计模式之行为型:状态模式
- 深入Java设计模式之策略模式
- 实操代码研究各种Java技术-java.toutiao.im
- Java适配器模式