概述
1,模式:在生产实践中,积累下来的经验,办事的套路
2,设计模式:在开发中,针对类,接口,方法等的设计套路,就是设计模式
3,在软件开发中,有23种设计模式,在不同的场景下,不同的需求中,可以使用不同的设计模式良好的解决问题
4,单例设计模式:单:一个,单个;例:实例;在某种情况下,设计一个类,这个类有且仅有一个对象
5,但例设计模式的原则:
1)构造方法私有化
2)在类中创建好对象
3)在例中对外提供获取对象的方式
单例设计模式之饿汉式
1,在加载类的同时,就要初始化静态成员变量,所以旧同事降本类对象创建出来
2,饿汉式:一给食物就吃,类一加载就要创建对象
public class Demo07_SingletonHungry {
public static void main(String[] args) {
SingletonHungry sh1 = SingletonHungry.getInstance();
SingletonHungry sh2 = SingletonHungry.getInstance();
System.out.println(sh1);
System.out.println(sh2);
}
}
class SingletonHungry {
//1.构造方法私有化:限制外界创建对象
private SingletonHungry() {}
//2.在类中创建好对象
private static SingletonHungry sh = new SingletonHungry();
//3.在类中对外提供获取对象的方式
public static SingletonHungry getInstance() {
return sh;
}
}
**饿汉式简写**
```java
public class Demo07_SingletonHungry {
public static void main(String[] args) {
SingletonHungry sh1 = SingletonHungry.getInstance();
SingletonHungry sh2 = SingletonHungry.getInstance();
System.out.println(sh1);
System.out.println(sh2);
}
}
class SingletonHungry {
//1.构造方法私有化:限制外界创建对象
private SingletonHungry() {}
//2.在类中创建好对象
private static final SingletonHungry sh = new SingletonHungry();
}
}
懒汉式
1,懒汉式:在加载类的时候不着急创建对象,等到调用方法经过好几层判断后,非创建不可才去创建,就是懒汉式,能不做就先不做。
public class Demo08_SingletonLazy {
public static void main(String[] args) {
}
}
class SingletonLazy {
//1.构造方法私有化限制外界创建对象
private SingletonLazy() {}
//2.在类中提前创建好对象
private static SingletonLazy sl;
//A B
//3.对外提供公开的获取方式
public static SingletonLazy getInstance() {
//内外层的判断一个都不能少,外层主要提高效率,但是如果将内层if去掉,会重新出现线程安全问题
//3.多线程环境下如果每一次都获取同步锁对象再去判断效率低下,外层加上一个判断,能尽可能的提高效率
if (sl == null) {
//2.多线程环境下,无法保证1的线程安全,所以加上同步代码块保证操作的完整性
synchronized (SingletonLazy.class) {
//1.判断当前对象是否存在,如果存在就不创建不存在才创建
if (sl == null) {
sl = new SingletonLazy();//12345
}
}
}
return sl;
}
}