<%@ page contentType="text/html; charset=gb2312"%> Singleton 模式在 Java 中的应用
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
Singleton 模式在 Java 中的应用
     发布者: 发布时间:2007-11-26
程序中经常有这样的要求,整个程序运行时只有一个实例被使用。比如:数据库连接池,系统参数配置,Java API 中的 Runtime, Calendar ...如何实现这种需求成为一个值得讨论的问题。以往的做法,是在程序的某个类里面(比如是 GlobalObject )建立一个这个此种类的实例,然后规定所有需要用到此类的,都从 GlobalObject 那里获得,看下面的例子:public class ConnectionPoolManager {public ConnectionPoolManager {// do some initialize work}public Connection getConnection(){....}}public class GlobalObject {private ConnectionPoolManager connectionPoolManager;public GlobalObject () {connectionPoolManager = new ConnectionPoolManager();...}public void getConnectionPoolManager() {return connectionPoolManager;}}public class QueryFunctions {public static Collection findStudentByName(String name){ConnectionPoolManager = globalObject.getConnectionPoolManager();Connection connection = connectionPoolManager.getConnection();// query database}}但这样做有如下缺点:其他人可能 调用 ConnectionPoolManager 的构造函数自己建立一个 数据库连接池,导致程序中存在多个 ConnectionPoolManager,人为的规定往往得不到好的实施。GlobalObject 其实就是一个 C 语言中的全局变量,与面向对象的方法相冲突。因此,可以使用 设计模式 中的 Singleton (单件)模式来完成以上的需求:Java API 中的 Runtime 等等用的就是这种方法。代码如下:public class ConnectionPoolManager {private static instance = null;private ConnectionPoolManager() {// do some initialize work}public static void getInstance() {if (instance == null){instance = new ConnectionPoolManager();}return instance;}public Connection getConnection(){}}ConnectionPoolManager 的使用public class QueryFunctions {public static Collection findStudentByName(String name){ConnectPoolManager connectionPoolManager = ConnectionPoolManager.getInstance();Connection conn = connectionPoolManager.getConnection();// query database}}1.instance 是私有的,开始时赋值为 null,外部只有通过 getInstance 方法才能获得他。2.构造方法是私有的,这点很重要,保证只有这个类自己才能够调用,其他的类无法调用此构造函数。3.getInstance 方法中:if 语句,保证只有一个 instance 存在唯一的一个 ConnectionPoolManager 在第一次调用的时候被建立。下面是另一个例子: java.lang.Runtime我刚看了 Runtime 的实现如下:public class Runtime {private static Runtime currentRuntime = new Runtime();public static Runtime getRuntime() {return currentRuntime;}/** Don‘t let anyone else instantiate this class */// 够狠private Runtime() {}}它在定义变量时创建 唯一的 Runtime 实例。Java语言在设计的时候就使用了很多 设计模式的思想,像 Collection 中的 Iterator 模式,Event 中的 Observer 模式,Applet 中的 Templete 模式,对象创建时的 Factory 模式,这些模式大多可以从 Java 的类的命名中体现出来,希望大家在学习 Java 时多注意对 设计模式 的学习。参考:设计模式:可复用面向对象软件的基础 (Gang of Four 的 Design Pattern 经典)Thinking in Pattern : http://www.mindview.net/Books/TIPatterns/ 还是 Bruce Eckel 写的。Design Pattern Java : ftp://cinc.dns2go.com/pub/doc/pattern/java
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
J2EE设计模式浅谈(二)之Filter
Adapter模式在J2SE事件处理中的应用
设计模式之父谈如何使用设计模式
AOP是什么?
JDBC-ODBC桥
ATM银行取款机模拟程序(可连接数据库)
 
最近评论:
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(7355)
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(1349)
        
左边的风景!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(5559)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold, max(2680)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(7848)
        
不在的哪天!
final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil, max(5446)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(7747)
        
昨夜的狂想曲!
wow gold,WoW Gold,world of warcraft gold,WoW Gold, max(3584)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(6493)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号