设计模式(3):单例模式 Singleton

单例模式,最大使用,最大范围,什么,你的项目没用?功能主治:大量减小new运算,降低性能开销。

单例模式 Singleton

问题:

Application needs one, and only one, instance of an object. Additionally, lazy initialization and global access are necessary.

意图:

代码

例1:实现1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.xdnote.DesignPattern.creational.signleton;

public class Singleton {
/**
* 私有构造器,防止被NEW
* */
private Singleton() {
System.out.println("Build a Object");
}

public static Singleton obj = null;
public static Singleton getInterface(){
if(obj==null){
obj = new Singleton();
}
return obj;
}

public void method(){
System.out.println("Run Method");
}
}

代码2:另一种实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.xdnote.DesignPattern.creational.signleton;

public class Singleton2 {
private Singleton2() {
System.out.println("Build a Object");
}

private static class Provider {
private static final Singleton2 obj =new Singleton2();
}

public static Singleton2 getInterface(){
return Provider.obj;
}
public void method(){
System.out.println("Run Method");
}

}

代码3:客户端调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.xdnote.DesignPattern.creational.signleton;

public class Client {

/**
* 超级简单的单例模式,这个也不用多说了,大家入门时都用过单例+工厂做过东西吧,这里提供了两种方法
* @param args
* 做用就不说了,看打出来的日志就知道,如果有多个地方需要一个对象时,可以减少new带来的性能损失
*/
public static void main(String[] args) {
//第一种是用常用的内部状态变量实现
Singleton obj1 = Singleton.getInterface();
obj1.method();
Singleton obj2 = Singleton.getInterface();
obj2.method();
Singleton obj3 = Singleton.getInterface();
obj3.method();

//另一种用个内部静态类
Singleton2 obj4 = Singleton2.getInterface();
obj4.method();
Singleton2 obj5 = Singleton2.getInterface();
obj5.method();
Singleton2 obj6 = Singleton2.getInterface();
obj6.method();
}

}

小结

单例模式 Singleton