适用性
在下面的情况下可以使用Singleton模式
• 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
这句话的翻译有一点点问题,还是看英文原文:
there must be exactly one instance of a class, and it must be accessible
to clients from a well-known access point.
作者认为应该这样翻译:当类只能有一个实例而且要求这个实例可以通过一个清晰简明的访问点访问时。
• 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
英文原文
when the sole instance should be extensible by subclassing, and clients
should be able to use an extended instance without modifying their code.
作者的译法:当这个唯一的实例需要通过子类扩展,而且要求客户不需要修改代码就可以使用这个扩展的的实例时。
结构
估计这是《设计模式》一书中最简单的类图了。但即便如此,这个图仍然可以简化:真正必须的只有2个静态成员。
参与者
• Singleton
— 定义一个Instance操作,允许客户访问它的唯一实例。 Instance是一个类操作(即Smalltalk中的一个类方法和C++中的一个静态成员函数)。
类操作这个词时相对于实例操作而言的,C++中就是静态成员函数。
— 可能负责创建它自己的唯一实例。
也可能时使用实现定义好的(例如全局变量)实例。
协作
• 客户只能通过Singleton的Instance操作访问一个Singleton的实例。
没啥好说的。
作者观点
类图中没有提到客户,这并不是说没有客户,而是随便谁都可能成为客户。
注:
本文中
蓝 {MOD}粗体文字都引自《设计模式》一书。
觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】