今天主要写一个单例模式的常用四种写法(懒汉,饿汉,懒汉加锁,枚举)
设计模式有23种,常听到的有单例模式。
单例模式(解释):①模式:pattern:有规律的模式,或根据某种需求创造出的某种东西。
单例模式:一个类只有一个实例。
(一个软件只能打开一个窗口)(枚举是天生的单例模式<存放在同一个地址下 >)
注: (线程不安全,多线程可以创建两个线程)
实现:
1:不能被外部创建(private)
2:禁止外部访问()
3:内外部保证一致
懒汉单例模式:没有用就不初始化,要用时,才初始化
懒汉式单例步骤:
1:静态属性,存储单例(所有类共享同一份数据)
2:私有的构造器,限制外部不能访问
3:静态方法,获取单例
4:返回单例名
public class Slacker {
/*
* 懒汉单例模式:没有用就不初始化,要用时,才初始化
*/
private static Slacker instance = null;//定义
private void slacker() {
}
public static Slacker getInstance() {
if (instance == null) {
instance = new Slacker();//初始化
}
return instance;
}}
饿汉式单例步骤:
1:相关属性初始化
2:开始时就创建实例
3:返回单例名
public class Hungry {
/*
饿汉单例模式:在还没有实例化的时候就初始化
*/
private static final Hungry instance=new Hungry(); //初始化
private void hungry() {
}
public static Hungry getInstance() {
return instance;
}}
懒汉加锁:
在if前后加锁,第一个锁表示一次运行一个,第二个加锁表示没有实例就实例化
/*
加锁的懒汉模式
*/
public class Lock_up {
private static Lock_up instance = null;
private void Lock_up() {
}
private static Lock_up getinstance() {
synchronized (Lock_up.class) {
// 加锁保证一次运行一个
if (instance == null) {
synchronized (Lock_up.class) {
// 加锁保证instance为空时,创建一个实例
instance = new Lock_up();
}
}
}
return instance;
} }
枚举单例模式:枚举表达的是:
一个集的枚举是列出某些有穷序列集的所有成员,简单来说就是每个都列举出来。
枚举单例:
实现单例的核心在于private私有化类中的构造方法,在枚举中的构造方法必须是私有的,这就为枚举来实现单例奠定了基础。
/*
枚举单例:枚举的创建是通过JVM保证,不会出现并发,
构造器自动私有,外部本鞥访问,能能通过引用的方式。
例如:一周有七天,可以通过枚举的方式实现他。
*/
public enum Enum {
INSTANCE;
public void dosomething() {
System.out.println("dosomething");
}
public static void main(String[] args) {
Enum.INSTANCE.dosomething();
}
}