package com.singleton;
class Singleton{
private Singleton(){
}
public void print(){
System.out.println("hello world");
}
}
public class SingletonDemo {
public static void main(String[] args) {
Singleton s1=null;
s1=new Singleton();
- 构造方法被私有化,不能再外部实例化,但如果将实例化放在自己内部类中呢?
package com.singleton;
class Singleton{
Singleton s1=new Singleton();
private Singleton(){
}
public void print(){
System.out.println("hello world");
}
}
public class SingletonDemo {
public static void main(String[] args) {
Singleton s1=null;
}
}
- 一个类的构造方法私有化以后,只能在其内部进行对象的实例化,但是如何将实例化的对象拿到外部类中进行操作呢,static声明的变量可以直接用(类.属性)进行访问。
package com.singleton;
class Singleton{
private static Singleton instance=new Singleton();
public static Singleton getInstance(){
return instance;
}
private Singleton(){
}
public void print(){
System.out.println("hello world");
}
}
public class SingletonDemo {
public static void main(String[] args) {
Singleton s1=null;
Singleton s2=null;
Singleton s3=null;
s1=Singleton.getInstance();
s2=Singleton.getInstance();
s3=Singleton.getInstance();
s1.print();
s2.print();
s3.print();
}
}
程序的意义:
- 不管声明多少个对象,最终都是通过getInstance()方法取得实例化对象,也就是说,s1\S2\S3都是通过一个对象的引用:instance,这就是单例模式,简单地说就是构造方法限制了实例化操作
- 单例设计的核心就是将类的构造方法私有化,然后再该类中进行对象的实例化操作,外部类想要访问就只有把实例化对象设为静态static,然后在私有封装属性,通过一个static静态方法访问对象,在main方法中调用该方法。