单例模式示例
2019-12-11 本文已影响0人
禾叶super
所谓的单例即类在创建对象时只创建一个对象。
示例1
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Person();
System.out.println("person1:"+person1.hashCode() );
System.out.println("person2:"+person2.hashCode() );
}
执行结果:

如果使用示例1来创建Person 类的对象,那么将会在每次执new时,创建不同的对象。如果我们能够保证类只创建一个实例,并且提供一个访问它的全局访问点,就能够控制类实例的个数。这就是单例模式要做的事情。
实例2:把Person改为单例模式
public class Person {
// 创建Person的一个对象
private static Person person = new Person();
// 构造函数私有化,不能再使用new来创建对象
private Person(){};
// 提供获取已创建的唯一对象的方法
public static Person getInstance(){
return person;
}
}
public class Test {
public static void main(String[] args) {
Person person1 = Person.getInstance(); // 在这里如果使用new创建对象会报错
Person person2 = Person.getInstance();
System.out.println("person1:"+person1.hashCode() );
System.out.println("person2:"+person2.hashCode() );
}
}
运行结果

由实例2可以看出无论何时调用Person.getInstance()都只能生成一个实例。到这里单例模式的简单示例就完成了。那么程序中为何要使用单例模式呢,单例和多例的本质区别又是什么呢?现在让我们一起在工作的过程中去思考这些问题。