单例设计模式:采取一定的方法在整个的软件系统中,使得某个类只能有一个对象实例,即一个类只能创建一个对象。
如何就只能创建一个对象呢?我们首先将构造器私有化,只能内部创建对象,不能用new在类的外部创造对象。
将对象声明为静态的,将返回类的对象的方法也声明为静态的。
单例设计模式中有饿汉式和懒汉式等。
饿汉式
用类获取对象的时候,对象已经提前为你创建好了
public class SingletonTest {
public static void main(String[] args) {
// Singleton i1 = Singleton.s1;
Singleton i1 = Singleton.getS1();
Singleton i2 = Singleton.getS1();
System.out.println(i1 == i2);
}
}
class Singleton{
private Singleton(){
}
//若下面的语句写成public static Singleton s1 = new Singleton();
//则在测试中可写成Singleton i1 = Singleton.s1;
private static Singleton s1 = new Singleton();
//外部只能通过get方法来得到类的对象
public static Singleton getS1() {
return s1;
}
}
懒汉式
在真正需要该对象的时候,才去创建一个对象(延迟加载对象)
public class SingletonTest2 {
public static void main(String[] args) {
Singleton l1 = Singleton.getS1();
Singleton l2 = Singleton.getS1();
System.out.println(l1 == l2);
}
}
class Singleton{
private Singleton(){
}
private static Singleton s1;
public static Singleton getS1() {
return new Singleton();
}
}
区分饿汉式和懒汉式
饿汉式:
坏处:类的加载时间过长
好处:线程安全
懒汉式:
好处:延迟类的加载
坏处:刚才写的代码线程不安全
单例模式的优点
减少系统性能开销