封装即是私有化。
package Lianxi2;
public class Singleton {
//2.声明本类类型的引用,指向本类类型的对象 使用private和static共同修饰
private static Singleton sin = new Singleton();
//成员变量 = 初始值 外面可以通过 类名.的方式访问。
private Singleton(){}
//1.私有化构造方法,使用private关键字修饰
//3.提供公有的get方法负责将对象返回回去
//
public static Singleton getSin() {
return sin;
}
}
package Lianxi2;
public class SingletonTest {
public static void main(String[] args) {
Singleton s1 = Singleton.getSin();
Singleton s2 = Singleton.getSin();
System.out.println(s1==s2);//指向的是同一个对象,因此只能得到一个对象
}
}
本质上是在类的里面自己申请了一个私有且静态的对象,然后从外面(main)使用get得到这个对象,因此不管main里面的s1 还是s2他们得到的都是这个在类中申请好的对象,而且这个对象要用private static修饰。
要注意:一旦一个类的构造方法被加上private,那么外面就不能再通过直接new对象来申请了,也就不能无限次的new,就只能通过再类里面new一个private和static共同修饰的对象,然后通过get送到外面,此时还要注意外面(main)使用get方法得到的时候,要用类名.的方式。
上面的是 饿汉式,上来就创建对象,也有懒汉式:
由于多线程的问题,饿汉式要优于懒汉式。