一、描述
单例模式是一种非常常见的设计模式,即一个类只能有一个对象(实例),一般通过将该类的构造器私有化,来阻止在该类外创建该类的对象,并提供给外界一个唯一的对象(这个对象在该类中创建)。
java中的单例模式常见的有两种实现方式,一种是恶汉方式,即将该类对象用static休息并且在类加载的时候进行初始化;另一种是饱汉方式,在程序中需要用到该对象的时候才初始化,一旦初始化一次就不会再重新生成该对象。
JDK中的Runtime类其实也是一种单例模式,而且其采用的是饿汉的方式。
二、源代码
package tong.yue.day4_25; import java.io.IOException; /** * 单例模式是一种非常常见的设计模式,即一个类只能有一个对象(实例),一般通过将该类的构造器私有化,来阻止在该类外创建该类的对象,并提供给外界一个唯一的对象(这个对象在该类中创建)。 * java中的单例模式常见的有两种实现方式,一种是恶汉方式,即将该类对象用static休息并且在类加载的时候进行初始化; * 另一种是饱汉方式,在程序中需要用到该对象的时候才初始化,一旦初始化一次就不会再重新生成该对象。 * jdk中的Runtime类其实也是一种单例模式,而且其采用的是饿汉的方式。 * @author Administrator * */ public class Singleton { public static void main(String[] args) { //饿汉式获取单例类的对象 Singleton_eager singleton = Singleton_eager.getInstance(); singleton.print(); //饿汉式获取单例类的对象 Singleton_lazy singleton_lazy = Singleton_lazy.getInstance(); singleton_lazy.print(); //jdk自带的Runtime类的单例对象的使用 Runtime runtime = Runtime.getRuntime(); try { //使用Runtime的对象调用windows中的记事本,打开一个记事本。 runtime.exec("notepad.exe"); } catch (IOException e) { System.out.println("记事本打开失败!"); e.printStackTrace(); } } } //饿汉式单例模式,在类加载的时候创建一个对象,之后就不再重复创建 class Singleton_eager { //声明为static类型,在类加载的时候创建一个对象 private static Singleton_eager singleton_eager = new Singleton_eager(); private Singleton_eager(){ } public static Singleton_eager getInstance() { return singleton_eager; } public void print() { System.out.println(singleton_eager); } } //饱汉式单例模式,当程序第一次使用该类的对象时创建对象,只创建一次,之后就不再重复创建 class Singleton_lazy{ private static Singleton_lazy singleton_lazy = null; private Singleton_lazy(){} public static Singleton_lazy getInstance() { //若是第一次使用该对象,那个就创建一个,否则就使用一个已经创建好的对象 if (singleton_lazy==null) { singleton_lazy = new Singleton_lazy(); } return singleton_lazy; } public void print() { System.out.println(singleton_lazy); } }
package tong.yue.day4_25; /** * JDK中的Runtime类的单例模式为饿汉式 * @author tong * */ public class Runtime { private static Runtime currentRuntime = new Runtime(); public static Runtime getRuntime() { return currentRuntime; } private Runtime() {} }
JAVA中的饿汉式和饱汉式单例模式及jdk中Runtime类的单例模式实现方式详解
原文:http://blog.csdn.net/tongyuehong137/article/details/45268835