单例设计模式之“懒汉式”+“饿汉式”
来源:互联网 发布:源码分享论坛 编辑:程序博客网 时间:2024/06/05 22:51
单例设计模式之“懒汉式”+“饿汉式”
单例设计模式----之“懒汉式”
(即静态变量声明时,没给它创建对象,使用时再创建)
说明:
1)“单例”的“例”是指“实例”,即“对象”(类的实例即对象),
2)单例模式是指在外部使用时,确保一个类(这个类是自己设计的)只有一个对象
设计步骤:
1.构造器私有化---这是为了避免外部使用其来创建对象
a) 谁来创建对象呢?? Java中其实是由JVM来创建的。
2.声明一个“该类(自己设计的类)私有的静态变量”
3.创建一个“该类(自己设计的类)的对外的静态的公共方法(即publicstatic)”来访问该变量,若该变量没有对象(即此变量声明时,没给它创建对象),要为其创建对象。
public classMyJvm {
private static MyJvm instance;
private MyJvm(){
}
public static MyJvm getInstance(){// doublechecking
if (null ==instance) {
synchronized (MyJvm.class){//锁定MyJvm类的字节码文件
if (null ==instance) {
instance =new MyJvm();
}
}
}
returninstance;
}
}
单例设计模式----之“饿汉式”
设计步骤:
1.构造器私有化---这是为了避免外部使用其来创建对象
a) 谁来创建对象呢?? Java中其实是由JVM来创建的。
2.声明一个“该类(自己设计的类)私有的静态属性” ,同时创建该对象
3.对外提供访问该属性的静态方法-----------创建一个“该类(自己设计的类)的对外的静态的公共方法(即public static)”来访问该变量。
class MyJvm2 {//效率不高
private static MyJvm2 instance =new MyJvm2();
private MyJvm2(){
}
public static MyJvm2 getInstance(){// double checking
returninstance;
}
}
/**
* “饿汉式”-------这种效率较高
* 提高效率,为何用了“内部类”就可以提高效率呢?
* 因为方法和类都是在使用的时候才加载的!!!!
* 即是说,当使用MyJvm3类时,没调用getInstance()方法就不会调用MyJvm3Holder类,
* 也就不会创建对象!!
* 这一系的反应,就会延缓加载时间,进而提高了效率!!
*/
class MyJvm3 {
public static class MyJvm3Holder{
private static MyJvm3 instance =new MyJvm3();
}
private MyJvm3(){
}
public static MyJvm3 getInstance(){// double checking
return MyJvm3Holder.instance;
}
}
- 设计模式-单例模式之饿汉式和懒汉式
- 设计模式------单例模式之饿汉式和懒汉式
- 设计模式之单例模式(饿汉式,懒汉式)
- 设计模式之单例模式-饿汉式&懒汉式
- 单例设计模式之懒汉式
- 《单例设计模式之饿汉式和懒汉式》
- java 单例设计模式之:懒汉式、饿汉式
- 单例设计模式之“懒汉式”+“饿汉式”
- 单例设计模式之饿汉式和懒汉式
- 单例设计模式 饿汉式 懒汉式
- 单例设计模式-饿汉式-懒汉式
- 单例设计模式:饿汉式,懒汉式
- 设计模式之单例设计模式(懒汉式)
- 单例设计模式之懒汉模式
- 设计模式_单例模式之懒汉式
- 设计模式-单例模式之懒汉式-多线程
- 设计模式_Java_多线程之单例设计模式(饿汉式和懒汉式)
- 单例设计模式之安全的懒汉式
- Leetcode 287. Find the Duplicate Number
- hdfs回顾总结(2)
- 创建者模式
- lemon mossle OA 工程自己学习指南, BMP Activiti BPM JBPM
- (POJ 3140 Contestants Division)树型DP + 删边
- 单例设计模式之“懒汉式”+“饿汉式”
- linux开发环境搭建(4)-从SD卡启动uboot
- 使用java画出正三角形
- 简单理解堆排序
- 函数调用模式4种方式详解
- 【C++】将txt文件中的内容读入动态二维数组内
- HRBUST1151-魔女
- “三天打渔,两天晒网”程序代码
- 有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。