设计模式之单模式 Singleton pattern
来源:互联网 发布:服务器免流软件 编辑:程序博客网 时间:2024/05/01 06:39
单模式要求类提供一个实例,访问该类必须通过同一实例,即一个类有具只有一个实例。示例java代码:
1.比较常用的一种实现单模式的方法
Connection.java
public class Connection {
private static Object forSyn = new Object();
public static Connection m_Connection = null;
public static Connection getInstance() {
synchronized (forSyn) {//使用synchronized实现线程同步,
//避免访问资源冲突而产生的错误
if (m_Connection == null)
m_Connection = new Connection();
}
return m_Connection;
}
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void Connect2DataBase() {
System.out.println("连接到" + type);
}
}
测试单模式Program.java
public class Program {
public static void main(String[] args) {
Connection conn = Connection.getInstance();
conn.setType("oracle");
conn.Connect2DataBase();
Connection conn2 = Connection.getInstance();
conn.setType("ms-sql");
System.out.println(conn==conn2);//输出true,由于使用单模式获
//得对象所有相等
conn.Connect2DataBase();
conn2.Connect2DataBase();
}
}
上面的代码似乎已经实现了单模式,可大家别忘了我们的要求(一个类有且只有一个实例),这就是说所有Connection类的访问示例必须通过getInstance()方法获取;然而通过以上方法我们虽然能够通过getInstance()访问类Connection但是并不能保证所有所有的访问都是同一实例,因为我们可以通过Connection conObj=new Connection()来创建Connection类的实例。所以还得对代码做一定的修改,怎么修改呢。就是将Connection的构造函数改为private使其不能在类的外部被实例化,代码如下:
public class Connection {
private static Object forSyn = new Object();
public static Connection m_Connection = null;
private Connection(){}//使其不能在类的外部被实例化
public static Connection getInstance() {
synchronized (forSyn) {//使用synchronized实现线程同步,
//避免访问资源冲突而产生的错误
if (m_Connection == null)
m_Connection = new Connection();
}
return m_Connection;
}
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public void Connect2DataBase() {
System.out.println("连接到" + type);
}
}
当然还有其他修改的方法(如使用final关键字等),在此不一一列举。
2. 延迟创建也较常用,这种实现方法把对像的创建工作交给另一个类去完成:
1) DelaySingleton.java
public class DelaySingleton {
private String name;
public static DelaySingleton getInstance()
{
return SingtonCreate.m_DelaySingleton;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2) SingtonCreate.java
public class SingtonCreate {
public static DelaySingleton m_DelaySingleton=new DelaySingleton();
}
- 设计模式之单模式 Singleton pattern
- 设计模式之单件模式(Singleton Pattern )
- Delphi设计模式之单例模式(Singleton Pattern)
- C#设计模式之单件模式(Singleton Pattern)
- Delphi设计模式之单例模式(Singleton Pattern)
- Net设计模式实例之单例模式( Singleton Pattern)
- 设计模式笔记之单例模式(Singleton Pattern)
- 设计模式之单件模式(Singleton Pattern)
- 设计模式之单态模式(Singleton Pattern)
- C++设计模式之Singleton pattern(单例模式)
- 设计模式之单例模式(Singleton Pattern)
- 设计模式之-单例模式(Singleton Design Pattern)
- JAVA设计模式之 单例模式【Singleton Pattern】
- 设计模式之单例模式(Singleton Pattern)C++实现
- 设计模式(创建型)之单例模式(Singleton Pattern)
- Java开发之设计模式--单例模式(Singleton Pattern)
- 设计模式之单例模式(Singleton pattern)
- 思维盛宴之设计模式-单例模式Singleton Pattern
- Unix 常用命令[转]
- 排序法
- C#绘制圆角窗体
- 关于索引
- C# 窗口全屏 隐藏任务栏 (代码)
- 设计模式之单模式 Singleton pattern
- CentOS5.1 Linux配置一台(LAMP)web服务器入门视频教程 - (3)在CentOS5.1上编译安装apache httpd-2.2.8视频入门演示教程
- 实现在调用jar包中的java方法时显示方法注释
- 不按先后顺序比较字符串序列是否相同(动态SQL)
- ASP动态include
- CSDN个人空间又改版了?
- 水晶报表
- VB 系统热键实现(模块)
- 对象初始化全过程