设计模式之单例模式

来源:互联网 发布:网络信息 编辑:程序博客网 时间:2024/06/06 13:05

1 单例模式

单例模式指的是一个类仅有一个实例,并提供一个访问它的全局访问点。

它的类图为



2 创建方式

2.1 饿汉式

package DesignPatterns;public class Singleton2 {// 饿汉式private static Singleton2 instance = new Singleton2();private Singleton2() {}public static Singleton2 getInstance() {return instance;}}

简单粗暴,类加载的时候就会初始化对象,会造资源浪费,线程安全。


2.2 懒汉式

package DesignPatterns;public class Singleton1 {// 懒汉式private static Singleton1 instance = null;private Singleton1() {}public static Singleton1 getInstance() {if (instance == null) {instance = new Singleton1();}return instance;}}
具有延迟加载的好处,但是线程不安全

2.3 懒汉式,线程安全

package DesignPatterns;public class Singleton3 {// 懒汉式,线程安全private static Singleton3 instance = null;private Singleton3() {}public static synchronized Singleton3 getInstance() {if (instance == null) {instance = new Singleton3();}return instance;}}
线程安全,使用了同步会造成效率降低,因为对象只需要初始化一次,之后无需初始化,也就不需要同步

2.4 懒汉式,双重检验锁

package DesignPatterns;public class Singleton4 {// 懒汉式,双重检验锁private static Singleton4 instance = null;private Singleton4() {}public static Singleton4 getInstance() {if (instance == null) {synchronized (Singleton4.class) {if (instance == null) {instance = new Singleton4();}}}return instance;}}
大大减少了不需要同步的时机,第二个判空的原因:在对象为空的时候,存在多个线程要初始化的情况,只有先获得锁的线程才可以实例化一个对象,其他竞争的线程不能再实例一个对象。

2.5 静态内部类

package DesignPatterns;public class Singleton5 {// 静态内部类private Singleton5() {}private static class SingletonHolder{private static Singleton5 instance = new Singleton5();}public static Singleton5 getInstance() {return SingletonHolder.instance;}}

由于类的加载机制,静态属性只会被加载一次,使用内部类到达了延迟实例化对象的效果。





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一年级的小朋友不爱看书怎么办 马上要生了害怕怎么办 孩子做题不爱读题怎么办 孩子作业写的慢怎么办 孩子学习不好怎么办我们有绝招 英语不会做题怎么办呢? 小学二年级孩子厌学怎么办 狗狗拉肚子不吃东西怎么办 小孩做作业时容易发呆怎么办 一上高速就犯困怎么办 孩子初中数学学不好怎么办 高三注意力不集中怎么办 考砸了家长打我怎么办? 高三学生困疲劳怎么办 高三晚上很困怎么办 孩子上高三压力大不想上学怎么办 高三的孩子压力大怎么办 高三复读压力大怎么办 孩子一年级做数学粗心怎么办 一年级的孩子数学总粗心怎么办 天生手脚笨的人怎么办 高三的孩子厌学怎么办 二年级小孩学习笨怎么办 孩子高二不想上怎么办 高三孩子玩手机怎么办 孩子考试粗心丢题怎么办 工作中总出错是怎么办 工作上做错事了怎么办 惹她不开心了怎么办 惹到别人不开心怎么办 孩子高三不愿意写作业怎么办? 小孩特别懒不爱学习怎么办 小孩上三年级不爱学习怎么办 一年级孩子做题粗心怎么办 一年级的孩子做题粗心怎么办 一年级娃娃做题粗心怎么办 有同学抄作业该怎么办 同学要抄我作业怎么办 同桌抄我作业我该怎么办 孩子想换同桌老师不同意怎么办 尴尬的事情心里难受怎么办