JAVA中的饿汉式和饱汉式单例模式及jdk中Runtime类的单例模式实现方式详解
2015-04-25 11:28
316 查看
一、描述
单例模式是一种非常常见的设计模式,即一个类只能有一个对象(实例),一般通过将该类的构造器私有化,来阻止在该类外创建该类的对象,并提供给外界一个唯一的对象(这个对象在该类中创建)。
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);
}
}
三、JDK中Runtime类的单例实现
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中的单例模式常见的有两种实现方式,一种是恶汉方式,即将该类对象用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);
}
}
三、JDK中Runtime类的单例实现
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复习)
- Java8 观察者模式详解 jdk实现源码分析
- Java 代理模式-JDK动态代理-实现对请求中文乱码的处理
- 详解Java文件下载的几种实现方式
- java实现单列模式的七种方式
- 详解Java实现多种方式的http数据抓取
- 详解Java两种方式简单实现:爬取网页并且保存
- Java中四种线程安全的单例模式实现方式
- Java List转换成String数组几种实现方式详解
- 单列模式详解-java实现
- 详解Java实现多线程的三种方式
- Java 实现工厂设计模式的三种方式
- Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解
- 详解Java设计模式编程中命令模式的项目结构实现
- 详解备忘录模式及其在Java设计模式编程中的实现
- Java Singletom 单例模式 常用实现方式
- JAVA并发实现五(生产者和消费者模式wait和notify方式实现)
- JAVA并发实现五(生产者和消费者模式Condition方式实现)
- JAVA设计模式---单例模式的几种实现方式比较
- 详解设计模式中的proxy代理模式及在Java程序中的实现