以下的代码对构造方法进行了私有化封装,但这样封装后我们在类外需要实例化对象是会出现错误,因为构造方法是私有的,所以无法实例化。
1 class Singleton{ 2 private Singleton() {} 3 public void print() { 4 System.out.println("hello world"); 5 }
既然在外部不能实例化对象,我们可以在类的内部实例化对象。
1 class Singleton { 2 // 在类的内部进行实例化对象 3 private static Singleton instance = new Singleton(); 4 // 获得instance属性 5 public static Singleton getInstance() { 6 return instance; 7 } 8 private Singleton() {} // 对构造函数进行了私有化封装 9 10 public void print() { 11 System.out.println("hello world"); 12 } 13 }
也因为外部不能实例化对象,我们如果要使用instance属性,就应该把它定义为static类型,此时我们就可以在外部调用getInstance()方法来实例化Singleton类型对象了。但这样做有什么用了,但我们实例化多个Singleton对象时,可以看到,s1、s2、s3其实指向的是同一个Singleton对象。
1 public class DataTest { 2 public static void main(String args[]) { 3 Singleton s1 = Singleton.getInstance(); 4 Singleton s2 = Singleton.getInstance(); 5 Singleton s3 = Singleton.getInstance(); 6 } 7 }
也就是说不管外部声明了多少个Singleton对象,最终结果都是通过调用getInstance()方法取得的实例化对象,即s1、s2、s3实际上都使用了一个对象的引用:instance。
那么这样的设计在设计模式上来讲叫做单例设计模式(单态设计模式)。
单例设计模式的核心是将类的构造方法私有化,之后在类的内部产生实例化对象,并通过类的静态方法返回实例化对象的引用。
如果现在不希望一个类产生过多的对象时,就可以采用单例设计模式。这在Java支持的类库中会经常用到。
原文地址:https://www.cnblogs.com/mzct123/p/8283448.html
时间: 2024-10-26 02:14:39