package com.cyj.thread.manage;
/**
* 单例设计模式:
*
* a 懒汉式:
*
* 构造器私有化,避免外部直接创建对象
* 2 声明私有化的静态
* 3 创建一个对外的公共静态的方法访问该变量
* 4 没有就创建,通过判断是否创建提升效率
*
* b 饿汉式:
*
* 1 构造器私有化
* 2 声明私有静态属性,同时创建该对象
* 3 对外提供访问属性的静态方法
*
* 注意:饿汉式在创建的时候注意对象直接创建属性还是创建内部类
* 通过内部类将创建对象的方法隐藏起来,在调用时再创建,避免了不必要的操作,提升了效率
* @author Chyjrily
*/
public class MySinglePattern {
private static MySinglePattern instance; //这里不创建对象,如果需要重新添加,从这可得懒汉式的定义
private MySinglePattern() {
}
public static MySinglePattern getInstance() {
if(null == instance) { //先判断是否创建了对象,执行不同的操作,提升效率
synchronized(MySinglePattern.class) {
if(null == instance) { //保证安全
instance = new MySinglePattern();
}
}
}
return instance;
}
}
/**
* 饿汉式
* 1 构造器私有化
* 2 声明私有静态属性,同时创建该对象
* 3 对外提供访问属性的静态方法
* @author Chyjrily
*
*/
class MySinglePattern2 {
private static MySinglePattern2 instance = new MySinglePattern2();
//这里直接创建对象,但是每个过来都要创建的话,如果不用效率会低,下面创建内部类提升性能
private MySinglePattern2() {
}
public static MySinglePattern2 getInstance() {
return instance;
}
}
/**
* 内部类创建饿汉式的对象
* 在调用时在创建,避免不必要的创建
* @author Chyjrily
*
*/
class MySinglePattern3 {
private static class MySinglePatternHold{
private static MySinglePattern3 instance = new MySinglePattern3();
//内部类可以再调用类时,执行该内的方法,如果没有创建内部类这就是属性,直接创建
}
private MySinglePattern3() {
}
public static MySinglePattern3 getInstance() {
return MySinglePatternHold.instance;
}
}
单例设计模式的两种创建方式(懒汉式和饿汉式)
猜你喜欢
转载自blog.csdn.net/qq_42036616/article/details/81075139
今日推荐
周排行