java 单例模式
参考文献:
http://c.biancheng.net/view/1338.html
https://www.runoob.com/design-pattern/singleton-pattern.html
单例模式 Singleton
一、特点:
1.单例类只有一个实例对象
2.该对象必须由单例类自行创建
3.对外提供一个访问该单例类的全局访问点
二、创建单例模式的两种方式:懒汉、饿汉
三、注意new与getInstance的区别:
大部分类都可以用new来产生一个新对象
getInstance用来生成唯一实例,返回值为该类的一个对象
语法: 类名 对象名 = 类名.getInstance();
四、demo
public class TestDemo{
public static void main(String args[]) {
President zt1 = President.getInstance(); //必须这么创建,SingleObject object = new SingleObject();会报错
zt1.getName(); //输出总统的名字
President zt2 = President.getInstance();//再生成一个实例
zt2.getName(); //输出总统的名字
if (zt1 == zt2) {
System.out.println("他们是同一人!");
} else {
System.out.println("他们不是同一人!");
}
}
}
class President{
private static volatile President instance = null;
private President() { //很关键!!!让构造函数为 private,这样该类就不会被实例化
System.out.println("产生一个总统");
}
public static synchronized President getInstance() { //获取唯一可用的对象
if (instance == null) {
instance = new President();
}
else {
System.out.println("已经有一个总统,不能产生新总统!");
}
return instance;
}
//加线程锁synchronize的单例模式可以保证线程安全,能够在多线程中很好的工作,但是,效率很低,99% 情况下其实不需要同步。
//优点:第一次调用才初始化,避免内存浪费。
//缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。
public void getName() {
System.out.println("baideng");
}
}运行结果:


查看9道真题和解析