为了巩固上一篇所写的内容java面向对象之基础扫描,特写个单例模式来巩固一下知识。
关于单例模式,从“单例”二字入手,就是只能创建一个实例对象,我们在coding的过程中,也是基于此目的才来设计该模式的。
现在我们从java语言入手,开始实现我们的目标——单例模式:
public class SingleInstance {
/*
* private 将类变量Instance私有化,
* static 对外部提供访问的途径是getInstance(),该方法
* 是静态方法
*/
private static SingleInstance instance;
/**
* 将构造方法私有化防止在该类之外任意new 对象;
* (创建对象必须调用构造函数)
*/
private SingleInstance(){
}
/**
* 外部不能new对象,我们只能给人家提供一个;
* 这里用到public的理由不必阐述;
* static的原因是因为外部不能new 对象,即:不能通过(对象.方法名)的方式来访问,
* java中给我们提供了静态成员的访问方式:(类名.方法名)
* @return
*/
public static SingleInstance getInstance(){
if(instance == null){
instance = new SingleInstance();
}
return instance;
}
}
别小看这个单例模式,正可谓是:麻雀虽小五脏俱全;
(1)首先面向对象的三大特性:封装;
(2)创建对象的方式:new + 构造方法;
(3)java中的访问权限修饰符;
(4)访问类成员的两种方式:
a.对象.成员;
b.类名.成员;(static关键字)
对于面试的小伙伴,面试官让你写个单例模式,不用慌,也不用死记硬背,就根据java的语言特点按照正常的逻辑推理就OK啦。
1.私有化构造函数(private);
2.选用类名.成员的方式让外部访问(static);
3.记得跟人家留条活路啊.
In a word,private + static
!!!
PS:上述的单例模式在多线程上,会出现问题;有兴趣可以自行深入学习一下;