Java设计模式—单态模式(Singleton)
2013-11-03 16:01
387 查看
单态模式(也有叫单例模式)表示一个类只有一个实例存在,生成用单态模式设计类不能用new 关键字来获得。可用简单的一句话来概括单态模式:
构造方法私有化,通过共有的静态方法返回类的实例。
最近在项目开发中,程序用到的各个参数被单独拿出来做成一个配置文件,程序接收到用户的定位请求就从配置文件读取出对应的参数和客户端中请求的参数比对,然后把定位请求发送到不同的定位平台,但问题来了,每次读取文件就要new 一个文件对象,而定位请求每秒可能有几个至几十个,频繁的文件读取导致服务器性能下降(读取文件,要生成文件对象,打开文件流,读取,关闭文件流)。就种情况就要用到单态模式,程序一启动就生成唯一的一个文件对象,这样每次读取文件不再与文件物理的建立I/O流,直接从内存中读取即可。
1.单态类(懒汉式单态类)
Java代码
package com.sunnylocus.singleton;
import java.io.File;
public class Singleton {
private static Singleton instance;
private static File configFile;
private Singleton() { //构造方法私有化
}
/** 获得配置文件对象*/
public File getConfigFile() {
return configFile;
}
/** 获得Singleton类的实例*/
public static synchronized Singleton getInstance() {//通过公有的静态方法返回类的实例
if(instance == null) {
configFile = new File("src/com/sunnylocus/singleton/locationConfig.xml");
instance = new Singleton();
}
return instance;
}
}
2.Test
Java代码
package com.sunnylocus.singleton;
import java.io.File;
public class Main {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if(s1 == s2) { //比较地址
System.out.println("s1和s2是同一个对象的实例");
}
else {
System.out.println("s1和s2不是同一个对象的实例");
}
File f1 = s1.getConfigFile();
File f2 = s1.getConfigFile();
if(f1 == f2) {
System.out.println("来自同一个文件对象");
}
else {
System.out.println("不是来自同一个文件对象");
}
}
}
3.output:
Java代码
s1和s2是同一个对象的实例
来自同一个文件对象
二、饿汉式单态类
Java代码
public class TestSingleton {
private static final TestSingleton instance = new TestSingleton();
private TestSingleton() {
}
/** 静态工厂方法*/
public static TestSingleton getInstance() {
return instance;
}
}
构造方法私有化,通过共有的静态方法返回类的实例。
最近在项目开发中,程序用到的各个参数被单独拿出来做成一个配置文件,程序接收到用户的定位请求就从配置文件读取出对应的参数和客户端中请求的参数比对,然后把定位请求发送到不同的定位平台,但问题来了,每次读取文件就要new 一个文件对象,而定位请求每秒可能有几个至几十个,频繁的文件读取导致服务器性能下降(读取文件,要生成文件对象,打开文件流,读取,关闭文件流)。就种情况就要用到单态模式,程序一启动就生成唯一的一个文件对象,这样每次读取文件不再与文件物理的建立I/O流,直接从内存中读取即可。
1.单态类(懒汉式单态类)
Java代码
package com.sunnylocus.singleton;
import java.io.File;
public class Singleton {
private static Singleton instance;
private static File configFile;
private Singleton() { //构造方法私有化
}
/** 获得配置文件对象*/
public File getConfigFile() {
return configFile;
}
/** 获得Singleton类的实例*/
public static synchronized Singleton getInstance() {//通过公有的静态方法返回类的实例
if(instance == null) {
configFile = new File("src/com/sunnylocus/singleton/locationConfig.xml");
instance = new Singleton();
}
return instance;
}
}
2.Test
Java代码
package com.sunnylocus.singleton;
import java.io.File;
public class Main {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if(s1 == s2) { //比较地址
System.out.println("s1和s2是同一个对象的实例");
}
else {
System.out.println("s1和s2不是同一个对象的实例");
}
File f1 = s1.getConfigFile();
File f2 = s1.getConfigFile();
if(f1 == f2) {
System.out.println("来自同一个文件对象");
}
else {
System.out.println("不是来自同一个文件对象");
}
}
}
3.output:
Java代码
s1和s2是同一个对象的实例
来自同一个文件对象
二、饿汉式单态类
Java代码
public class TestSingleton {
private static final TestSingleton instance = new TestSingleton();
private TestSingleton() {
}
/** 静态工厂方法*/
public static TestSingleton getInstance() {
return instance;
}
}
相关文章推荐
- Ubuntu系统下运行Eclipse出现找不到jre的问题的解决方法
- eclipse wifi 连接手机
- Java基础知识整理(一)- Error和Exception
- 简易版基于Java的Servlet容器实现
- java poi 大批量数据处理,2007
- eclipse的debug
- Spring事务隔离级别和事务传播行为
- spring framework源码下载并导入eclipse
- failed to create the java virtual machine
- java,类方法访问小结
- 深入浅出Java多线程(2)-Swing中的EDT(事件分发线程) [转载]
- [安卓编译]JDK1.6 64位
- Spring AOP 实现和一些核心思想
- Java Classpath!
- java的外盒问题!
- hadoop学习笔记一之ubuntu下安装jdk
- Java Concurrent Lock锁
- java 上传文件(文本文件)
- Ubuntu 下 配置 jdk1.7
- ubuntu下创建eclipse桌面快捷方式