【Java设计模式】单件模式

概念

单件模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Prototype Pattern
Ensure a class only has one instance, and provide a global point of access of it.

角色

单件类(Singleton):单件类可以创建出一个实例。

类图

单件模式类图

单件模式代码示例

详见Java设计模式代码仓库的Prototype Pattern包

单件模式是如何保证创建唯一实例的?

以上传到代码仓库的Moon类代码为例。
Moon类

Moon类构造函数定义为private

单件模式将构造函数定义为了私有,是为了防止外部直接实例化,阻止其他代码通过new关键字直接创建实例,确保唯一性。

get方法为公有静态的

getMoon()函数定义成公有静态的原因是:静态方法属于类级别,无需创建类的实例,就可以直接调用。
客户端只需要通过类名调用方法。

Moon moon = Moon.getMoon();

get方法里进行判空

get方法里进行判空的目的是:保证单例对象只在第一次被请求时才被创建。

将类变量定义为static

将类变量Moon定位为静态的原因是,静态函数不能访问非静态变量。定义为static后,便可在静态方法getMoon()里进行访问。

总结

单件类的唯一实例由单件类由单件类本身控制,所以可以很好地控制用户何时访问它。
单件模式本身可能是整个设计模式中最简单的一个模式了,可是为什么今天我不先写之前软件工程方法学教过的工厂模式呢?
因为今天上Java设计模式的时候,老师在对单件模式具体实例代码中,关于类成员私有和静态方面提出很多问题(上述四个),但是我发现自己对Java最基础的这方面的知识掌握过于欠缺了。
例如通过将成员函数定义为私有防止外部实例化,静态函数不能访问非静态变量这些等等。
我觉得虽然单件模式在设计上很简单,但是在实现上如果要想保证一个类仅有一个实例的话,对Java语言特性的深刻了解是很重要的。
今天上了一课。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值