转眼国庆就结束了(我们公司调假,今明上班,89放假)。
几天不coding,都快生疏了。 今天还是聊聊设计模式。早上又读了一遍JAVA大神的 关于设计模式的文章,受益匪浅,其实每次拜读,都有新的收获。
就像我刚入行时听Mars老师说的,随着你编程阅历的增加,你会发现,每一年,你对接口的理解都不一样。
其实在coding世界,虽然工作的时候我们会抱怨需求又变化了啊等等,但coding的乐趣,就是要拥抱变化,也因此,才会有设计模式之说。
别看一个简单的单例模式,其实,还是有很深的编程思想和变化在里面的。
今天做个简单的例子:就说说饿汉模式和懒汉模式的区别吧
代码主角:
1、Singleton类(单例类)
首先,是饿汉模式:
简单的三部曲
public class Singleton {
// 饿汉一开始就实例化,即使程序可能不用到该类,也要消耗该资源。
private static Singleton instance = new Singleton();
// 私有化构造方法,避免被外部new
private Singleton() {
}
// 公有的静态方法,用以获取单例
public static Singleton getInstance() {
return instance;
}
}
其次,是简单的懒汉模式:
public class Singleton {
// 懒汉模式,区别于恶汉模式在于,饿汉一开始就实例化,消耗资源。
//不过懒汉模式因此也就有了线程安全的问题
private static Singleton instance = null;
// 私有化构造方法,避免被外部new
private Singleton() {
}
// 公有的静态方法,用以获取单例,如果已创建,直接返回,未创建,则new一个
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
考虑到线程安全,其实这里需要加锁
// 考虑到线程安全,这里需要加锁
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
大功告成,写个测试类Test试试:
public class Test {
public static void main(String[] args) {
//分别实例化两个对象,输出结果,判断是否是同一个对象
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1);
System.out.println(singleton2);
}
}
来看看
控制台输出的结果:
Singleton.Singleton@2a139a55
Singleton.Singleton@2a139a55
完全相同。所以无论实例化多少个对象,其实只有第一次实例化时是创建对象,之后都是返回已有的对象。
最后的最后,今天就不上源码了,很简单,建议小伙伴们国庆后自己动手码一码,
其实我今天最想做的事是:
分
享
大
神
的
文
章
Java之美[从菜鸟到高手演变]之设计模式 三部曲:
1. http://blog.csdn.net/zhangerqing/article/details/8194653
2. http://blog.csdn.net/zhangerqing/article/details/8239539
3. http://blog.csdn.net/zhangerqing/article/details/8243942