单例模式(Singleton) Java实现
单例模式的实现方式有很多种,在这里介绍最简单的两种。
单例模式能够确保一个类只有一个实例(正常情况我们可以new出一个类的无数个实例),自行提供这个实例并向整个系统提供这个实例。下面介绍单例模式的实现方法:
1. 单例模式有两种实现方式:一种是将类的构造法方法私有化,用一个私有的类变量instance保存类的实例,在加载类时,创建类的实例,并将实例赋给instance,再提供一个工友的静态方法getInstance用于获取类的唯一实例,该方法直接返回instance。另一种是将类的构造方法私有化,用一个私有的类的变量instance保存类的实例,到此为止都与第一种情况相同,但是在加载类时,将null赋给instance而不是创建类的实例,再提供一个类的工友的静态方法getInstance,用于获取类的唯一实例,该方法首先判断instance是否为null,如果为null,则创建实例对象,否则,直接返回instance。
2. 两种方法的区别在于:前者在类被加载时,类的唯一实例就被创建出来了,后者在第一个调用getInstance()方法时,类的唯一实例才被创建,但需要在getInstance()方法的声明中使用synchronized关键字,保证某一时刻只有一个线程调用此方法,如果不使用synchronized关键字的话,就有可能出现有两个线程同时访问getInstance方法,如果此时instance恰好为null,则两个线程都会去创建这个类的实例,这就不符合单例模式的思想了。
代码实现:首先建立一个文件TestSingleton.java,然后将下面的测试代码拷贝到文件中运行。
class OneSingleton {
private static OneSingleton instance = new OneSingleton();
private static int number = 0;
private OneSingleton() {}
public static OneSingleton getInstance() {
return instance;
}
public synchronized int getNumber() {
return number;
}
public synchronized void nextNumber() {
number++;
}
}
class TwoSingleton {
private static TwoSingleton instance = null;
private static int number = 0;
private TwoSingleton() {}
public static synchronized TwoSingleton getInstance() {
if(instance == null) {
instance = new
相关文档:
《Java高级技术》课程简介
1. Java程序设计语言引论
2. Java语言的结构化特性
3.1. Java语言的面向对象特性(1)
3.2. Java语言的面向对象特性(2)
3.3. Java语言的面向对象特性(3)
3.4. Java语言的面向对象特性(4)
4.1. 面向对象设计原则
4.2. 面向对象设计模式示例
5.1. Java的异常处理机制
5.2. Java语言 ......
1.[http://www.javaalmanac.com] – Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.
2.[http://www.onjava.com] – O’Reilly的Java网站. 每周都有新文章.
3.[http://java.sun.com] – 官方的Java开发者网站 – 每周都有新文章发表.
4.[http:/ ......
命名规范
项目名:各单词首字母大写,其它字母小写
包名:全部字母小写且唯一,通常为公司域名的倒序
源文件名:各单词首字母大写,其它字母小写
方法名:第一个单词全部小写,其余单词首字母大写,其它字母小写,一般应为动词
成员变量名:第一个单词全部小写,其余单词首字母大写,其它字母小写
成员常量名:所有单 ......
很早之前写过利用泛型和反射机制抽象DAO ,对其中获取子类泛型的class一直不是很理解。关键的地方是HibernateBaseDao的构造方法中的
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
entityClass = (Class)params[0] ......
就是要到sun的网站下载JDK,jdk-6u10-beta-windows-i586-p.exe,我用的是这个。
还是在sun的网站下载WTK,sun_java_wireless_toolkit-2_5_2-windows.exe,我用的这个。
然后就是先安装jdk再安装wtk,我的安装路径是:D:\Java\jdk1.6.0_10和D:\Java\WTK2.5.2
下载eclipse,我用的是:wtp-all-in-one-sdk-R-1.5.5- ......