//单例设计模式
/**
* 1.构造函数无法暴露出去,只能用private进行修饰
* 2.因为是单例,所以,必须存在唯一的实例,也即,那唯一的实例,只能在类内部创建
* 3.无法创建对象,外部需要访问时,只能同类名进行方法,也即,必须使用static修饰
* (属性/方法访问有2中:对象.xxx 类名.xxx
*
*/
/*单例模式
* 1:构造方法私有化。
* 2:声明一个静态的成员变量。
* 3:提供一个公共的方法,返回该类的实例。
* 饿汉式跟懒汉式的区别
* 1:项目中用饿汉式。而面试经常问懒汉式。
* 2:懒汉式代码是有缺陷的,会出现问题。
*/
// 懒汉式
/*单例模式
* 1:构造方法私有化。
*/
public class SingInstance {
private SingInstance(){
}
private static SingInstance single;//懒汉式。在声明的时候没有给它创建对象。
public static SingInstance getInstance(){//线程不安全。讲线程的时候再解决问题。
if(single==null){
single = new SingInstance();
}
return single;
}
}
// 饿汉式
package com.qianfeng.writer;
/*单例模式
* 1:构造方法私有化。
* 2:声明一个静态的成员变量。
* 3:提供一个公共的方法,返回该类的实例。
* 饿汉式跟懒汉式的区别
* 1:项目中用饿汉式。而面试经常问懒汉式。
* 2:懒汉式代码是有缺陷的,会出现问题。
*/
public class SingInstance2 {
private SingInstance2() {
}
private static SingInstance2 single = new SingInstance2();// 饿汉式。
public static SingInstance2 getInstance() {
return single;
}
}
//测试
package com.qianfeng.writer;
public class TestSingle {
public static void main(String[] args) {
System.out.println(SingInstance.getInstance());
System.out.println(SingInstance.getInstance());
System.out.println(SingInstance.getInstance());
System.out.println(SingInstance.getInstance());
System.out.println(SingInstance.getInstance());
}
}