标签:
很多设计模式系列的文章开篇大都以 { 单例模式 } 小试牛刀,标明了单例是最简单的设计模式之一,我也循业内规则,说一说简单的单例模式。
此为单例模式的类图:一个普通类 Singleton,类中包含了一个 Singleton 类型的私有静态字段 instance、受保护的构造器以及一个返回值为 Singleton 的公有静态方法 getInstance() 。so easy?
先来实现一个简单的“经典“单例模式(为什么打上引号,你懂的!):
public class ClassicSingleton { private static ClassicSingleton instance = null; protected ClassicSingleton() { } public static ClassicSingleton getInstance() { if (instance == null) { instance = new ClassicSingleton(); } return instance; } }
如上代码若是在面试中出现,那么面试官的第一反映就是:这个小伙要学的东西还很多啊!so young so simple!热心点的面试官可能会以各种反问句的方式来解释此段代码的各种坑,不耐烦的可能就直接 pass 了……
在 Java 语言规范中,protected 的构造方法能够被其子类以及在同一个包中的其它类调用来实例化类,由此何谈类的单实例!这个坑还比较好填,修改单例类构造器为 private,如此构造器只能在单例类内部调用,子类以及同一个包中的其它类便无法调用,保证了全局只能通过调用getInstance 方法这一种途径来获取单例类的实例。Better better,best!此种情形下如果声明类为 final 类,这样意图明确且采用了编译器的某些性能优化,何乐而不为!
标签:
原文地址:http://www.cnblogs.com/giserxiaoliang/p/4922879.html