最近看了看程杰
前辈的《大话设计模式》
,主要是上次面试被问设计模式,答的很菜。。。经过一段时间的沉淀,现在来谈谈我对其单例模式
的理解。
设计模式之单例模式
一、单例模式
1、定义
单例模式
(Singleton),保证一个类仅有一个实例
,并且提供全局访问该实例
的接口。简单的说,既要保证该类只有一个实例
,也要保证全局访问的就是这个唯一的实例
。
2、使用场景
那么肯定有小伙伴会问,单例模式
有啥使用场景吗?限制一个类只有一个实例
,这种场景比较少吧。。。
确实,限制一个类只有一个实例
的场景比较少,但是并不代表单例模式
毫无用武之地。举个栗子,运用程序是如何维持某个窗口只一个的?比如系统桌面右键菜单。
如果不控制窗口对应的对象同一时刻只有一个,那么可能你每点一次,都会弹出一个同样的窗口。这显然不符合实际逻辑,也会造成资源的浪费。
其实还有另外一种普遍的场景,类中的静态属性
。我想写过面向对象编程序思想的程序小伙伴都在类中定义过static
属性,我们把某个变量加上static
关键字修饰,目的是把这个变量声明为类
本身所有,而不是类的实例
所有。最主要的作用不就是类的所有实例
都来访问这同一个static
属性,这正好与我们单例模式的思想吻合。
二、举例(静态属性)
上面提到了 类中的静态属性
是单例模式思想的一种特殊运用,下面我们通过代码来模拟一下。
public class SingleTon {
// 对object属性添加static修饰(这个变量属于SingleTon类,不属于实例)
public static MyClass object = new MyClass();
public static void main(String[] args) {
// 新建两个SingleTon对象
SingleTon singleTonOne = new SingleTon();
SingleTon singleTonTwo = new SingleTon(