所谓的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个获取其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但是,在类的内部依然可以产生该类的对象。因为在类的外部开始还无法得到该类的对象,只能调用类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。
:::success
单例模式:保证某个类在系统中永远只能创建一个实例
两种形态:饿汉式(先将实例创建好)
懒汉式(等需要的时候再来创建)
:::
1、饿汉式
保证某个类在系统中永远只能创建一个实例
将构造方法私有化,不让外部的类来创建实例
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {
// 私有构造方法
}
public static EagerSingleton getInstance() {
return instance;
}
// 其他方法和属性...
}
2、懒汉式
懒汉式:等需要再创建 判断是否为空 为空再创建
不用就不会创建
好处:节省内存占用
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {
// 私有构造方法
}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
// 其他方法和属性...
}
3、饿汉式和懒汉式的组合
public class People {
/**
* 将或构造方法私有化,不让外部的类来创建实例
*/
private People() {}
/**
* 使用静态内部类来创建一个唯一的外部类实例
*/
private static class InnerClass {
//创建一个唯一的外部类实例
private static final People INSTANCE = new People();
}
/**
* 对外部提供一个公开的方法获取实例
* @return
*/
public static People getInstance() {
//当使用InnerClass时才会加载这个内部类,从而初始化People的实例
return InnerClass.INSTANCE;
}
public void say() {
System.out.println("Hello world");
}
}
标签:People,创建,private,实例,static,模式,单例,public
From: https://www.cnblogs.com/s186/p/17449383.html