单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。懒汉式单例模式(返回时才创建对象,下面的例子就是)和饿汉式单例模式(在声明变量的时候就创建对象)。
类图:
代码实现:
publicclass Singleton {
//1.构造方法私有化,不能在类的外部创建类。
private Singleton(){}
//2.创建私有的唯一实例。
privatestatic Singleton instance;
//3.创建公共的访问方法。(获取实例)
publicstatic Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
returninstance;
}
}
publicstaticvoid main(String[] args) {
Singleton sing1=Singleton.getInstance();
Singleton sing2=Singleton.getInstance();
Singleton sing3=Singleton.getInstance();
System.out.println(sing1);
System.out.println(sing2);
System.out.println(sing3);
}
运行结果:
Singleton.Singleton@1fc4bec
Singleton.Singleton@1fc4bec
Singleton.Singleton@1fc4bec
但是这还有问题!getInstance方法不是线程安全的,如果是多线程程序就可能产生两个对象。所以还要在getInstance方法加上synchronized关键字声明,synchronized关键字声明线程安全。
优点:统一管理数据,节省空间。
缺点:降低程序的效率。
本模式节省空间,降低了效率。就是用效率来换空间。(伦:设计程序在很多时候就是要找空间和效率的平衡点;达:在如今信息化的时代,速度比空间要重要)