参考文献:
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"); } }
运行结果: