单例模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

单例模式:保证类在内存中只有一个对象。外界只有使用权,无法创建对象。

  如何保证内存中只有一个对象

A、构造方法私有

B、在成员位置自己创建一个变量

C、通过一个公共的方法提供访问

 

  单例模式分为饿汉式和饱汉式

饿汉式:类一加载就创建对象          如Runtime类就属于饿汉式  他的exec()方法可以直接打开dos命令。

饱汉式:用的时候才去创建对象

   饿汉式代码

package cn.idcast3;
public class Student {
	private Student() {
	}
	//  属于单例模式的饿汉式 ,就是一进来就创建对象
    //加私有的原因是由于外界不能访问,只有使用权
	//加静态的原因:静态方法只能访问静态成员变量
	private static Student s = new Student();
    //为了保证外界可以直接使用,所以需要加静态
	public static Student getStudent() {
		return s;
	}
}

 测试

package cn.idcast3;

public class StudentDemo {
public static void main(String[] args) {
	Student s1 =Student.getStudent(); 
	Student s2= Student.getStudent();
	System.out.println(s1==s2);	
}
}

     饱汉式代码

package cn.idcast3;

public class Teacher {
	private Teacher() {
	}
	private static Teacher t = null;
   //由于静态方法是共享的,所以t1创建了对象,但是t2不用
   //懒加载(延迟加载)问题,由于饱汉式是需要用的时候才创建的,所以会存在
   //存在线程安全问题,有共享数据Teacher和操作多条语句,并且将来可能在多线程环境
	public synchronized static Teacher getTeacher() {
		if (t == null) {
			t = new Teacher();
		}
		return t;
	}
}

  测试

package cn.idcast3;

public class TeacherDemo {
public static void main(String[] args) {
	Teacher t1= Teacher.getTeacher();
	Teacher t2 = Teacher.getTeacher();
	System.out.println(t1==t2);
}
}

  

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块