《设计模式解析》摘录(14)

Singleton 模式

    Singleton 模式和 Double-Checked Locking 模式都可以用于确保某个类只有一个对象实例化。两个模式的区别在于:Singleton 模式用在单线程应用程序中,而 Double-Checked Locking 模式用于多线程应用程序。

关键特征:

    意图:希望对象只有一个实例,但没有控制对象实例化的全局对象。还希望确保所有实例使用该对象相同的实例,而无需将引用传给它们。

    问题:几个不同的客户对象需要引用同一个对象,而且希望确保这种类型的对象数目不超过一个。

    解决方案:保证一个实例。

    参与者与协作者:Client 对象只能通过 getInstance 方法创建 Singleton 实例。

    效果:Client 对象无需操心是否已存在 Singleton 实例。这是由 Singleton 自己控制的。

    实现:

    1、添加一个类的私有的静态成员变量,引用所需的对象;

    2、添加一个公有静态方法,它在成员变量的值为 null 时实例化这个类(并设置成员变量的值),然后返回该成员变量的值;

    3、将构造函数的状态设置为保护或私有,从而防止任何人直接实例化这个类,绕过静态构造函数机制。

    如果知道需要一个对象,而且没有性能因素需要将对象的实例化推迟到需要时进行,用静态成员变量包含对该对象的引用,往往更简单。

    在多线程应用程序中,Singleton 对象通常必须是线程安全的,这意味着该对象要么在不同线程之间使用同步,要么没有数据成员。

    有状态 Singleton 应该谨慎使用,因为这样的全局数据可能会使系统的不同部分耦合。

    无状态 Facade 可以用一个 Singleton 实现化,以避免出现一个以上 Facade。Strategy 模式的具体策略对象(无状态时),Bridge 模式的具体实现(无状态时)也可以这样实例化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值