何为单例模式:
百度上的解释为:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
单例模式实现的思想:
1,不让其他程序创建该类对象。
2,在本类中创建一个本类对象。
3,对外提供方法,让其他程序获取这个对象。
步骤:
1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象;
2,就在类中创建一个本类的对象;
3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。(作用:可控)
代码体现:
1,私有化构造函数;
2,创建私有并静态的本类对象;
3,定义公有并静态的方法,返回该对象。
有一个比喻:一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机中。即在整个的打印过程中我只有一个打印程序的实例。
单例模式的代码体现:分为饿汉式和懒汉式。
饿汉式:
class Single {
private Single() {
}
private static Single s = new Single();
public static Single getInstance() {
return s;
}
}
懒汉式。(延迟加载)
class Single {
private Single() {
}
private static Single s = null;
public static Single getInstance() {
if (s == null)
s = new Single();
return s;
}
}
下面是一个单例模式的例子:
class Singleton {
private String name;
private Singleton(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private static Singleton s = new Singleton(); //定义一个私有的静态全局变量
public static Singleton getSingleton()
{
if (singleton == null) //如果为null,则实例化 。singleton只实例化一次
s= new Singleton();
return s;
}
}
class Singlemain
{
public static void main(String[] args)
{
Singleton single1 = Singleton.getSingleton();
Singleton single2 = Singleton.getSingleton();
Singleton single3 = Singleton.getSingleton();
single1.setName("单例模式");
System.out.println(single2.getName()+"--"+single3.getName());
}
}
运行后的结果为:单例模式--单例模式
这种模式保证内存中只有一个对象。实现这种模式,有三个步骤:
1构造函数声明为private
2在singleton类中创建一个singleton类对象
3写一个getSingleton去获取对象