类的封装性不只体现在对属性的封装上,实际上方法也是可以封装的。下面主要介绍对构造方法的封装。
封装是指一切都对外部不可见,那么意味着外部无法调用封装后的构造方法。既然外部不能调用,那么内部那?
通过在Student类内部实例化对象instance,但必须定义为static类型(以便外部访问)。创建一个返回类型为Student的方法将实例返回(需要判断是否实例化了)。在外部把返回的实例赋值给Student类中的另一个对象,此对象就可以就可以调用Student类的普通方法。
注意:永远只会有一个实例化对象存在 --->单例模式(只要将构造方法私有化,就可以控制实例化对象的产生)
单例模式主要有以下两种形式:
1.饿汉式
class Student{
private static Student instance=new Student(); //定义为static类型
private Student(){} //将构造方法封装
public static Student getInstance(){ //将实例返回
if(instance==null){
instance=new Student();
}
return instance;
}
public void show(){
system.out.println("HelloWorld!!");
}
}
public class TestStudent{
public static void main(String[] args){
Student stu1=Student.getInstance;
stu1.show();
}
}
2.懒汉式
class Student{
private static Student instance;
private Student(){}
public static Student getInstance(){
if(instance==null){
instance=new Student();
}
return instance;
}
public void show(){
system.out.println("HelloWorld!!");
}
}
public class TestStudent{
public static void main(String[] args){
Student stu2=Student.getInstance;
stu2.show();
}
}
分析:饿汉式和懒汉式的区别主要体现在实例化对象的顺序。可以发现,整个过程中只会有一个实例化对象产生!