聚沙成塔
单例模式在-I中的应用
上一篇 /
下一篇 2013-04-30 11:53:43
/ 个人分类:单元测试
底层支持平台有很多的功能实现都是单例模式。例如,数据库连接池、线程池、HTTP连接池、FTP连接池、TCP连接池等等。因此,在测试的过程中,常常需要先产生一个实例对象,例如DBConnectionManager.getInstance();TCPServiceImpl.getInstance()。常见的单例模式有三种:饿汉式、懒汉式、登记式。
//饿汉式
Class Singleton {
Private static
final Singleton instance = new Signleton();
Public
Singleton() {
}
Public static Singleton getInstance() {
Return instance();
}
}
//懒汉式
Class Singleton{
Private static
final Singleton instance;
Public
Singleton() {
}
Public static Singleton
getInstance() {
If (instance==null) {
Instance = new Singleton();
}
Return instance;
}
//登记式
1 importjava.util.HashMap;
2importjava.util.Map;
3//登记式单例类.
4//类似Spring里面的方法,将类名注册,下次从里面直接获取。
5publicclassSingleton3 {
6 privatestaticMap<String,Singleton3> map =newHashMap<String,Singleton3>();
7 static{
8 Singleton3 single =newSingleton3();
9 map.put(single.getClass().getName(), single);
10 }
11 //保护的默认构造子
12 protectedSingleton3(){}
13 //静态工厂方法,返还此类惟一的实例
14 publicstaticSingleton3 getInstance(String name) {
15 if(name ==null) {
16 name = Singleton3.class.getName();
17 System.out.println("name == null"+"--->name="+name);
18 }
19 if(map.get(name) ==null) {
20 try{
21 map.put(name, (Singleton3) Class.forName(name).newInstance());
22 }catch(InstantiationException e) {
23 e.printStackTrace();
24 }catch(IllegalAccessException e) {
25 e.printStackTrace();
26 }catch(ClassNotFoundException e) {
27 e.printStackTrace();
28 }
29 }
30 returnmap.get(name);
31 }
32 //一个示意性的商业方法
33 publicString about() {
34 return"Hello, I am RegSingleton.";
35 }
36 publicstaticvoidmain(String[] args) {
37 Singleton3 single3 = Singleton3.getInstance(null);
38 System.out.println(single3.about());
39 }
40}
参考http://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html
收藏
举报
TAG:
单元测试