设计模式——单例模式

以下是读《设计模式——可复用面向对象软件的基础》的读书笔记。

SINGLETON 单例

 

1、 意图

保证一个类仅有一个实例,并提供一个反问它的全局访问点。

2、 适用性

在下面情况下可以使用Singleton模式

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

3、 结构


4、 参与者

Singleton —— 定义一个instance操作,允许客户访问它的唯一实例。Instance是一个静态方法。——可能负责创建它自己的唯一实例。

5、 协作

客户只能通过Singleton的instance方法访问一个Singleton的实例。

6、 效果

Singleton模式有许多优点:

1)  对唯一实例的受控访问。因为Singleton类封装它的唯一实例,所以它可以严格控制的客户怎样以及何时访问它。

2)  缩小命名空间。Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染命名空间。

3)  允许可变数目的实例。这个模式使得你易于改变你的想法,并允许Singleton类的多个实例。此外,你可以用相同的方法来控制应用所使用的实例的数目。只允许访问Singleton实例的操作需要改变。

4)  比类操作更灵活。另一种封装单例功能的方式是使用类操作。

7、 实现

下面是使用Singleton模式时所以考虑的实现问题:

1)  保证一个唯一的实例。Singleton模式使得这个唯一实例是类的一般实例,但该类被写成只有一个实例能被创建。做到这一点的一个常用方法是将创建这个实例的操作隐藏在一个类操作后面,由它保证只有一个实例被创建。

2)  创建Singleton类的子类。主要问题与其说是定义子类不如说是建立它的唯一实例,这样客户就可以使用它。事实上,指向单件实例的变量必须用子类的实例进行初始化。

8、 代码示例

Singleton

package com.examples.pattern.singleton;

publicclass Singleton {
   
    privatestatic Singleton sing;
   
    private Singleton(){
      
    }
  
    publicstatic Singleton getInstance(){
      
       if(sing == null){
           sing = new Singleton();
       }
       returnsing;
    }
}


Client

package com.examples.pattern.singleton;

publicclass Client {

    publicstaticvoid main(String[] args) {

       Singleton sing = Singleton.getInstance();
       Singleton sing2 = Singleton.getInstance();

       System.out.println(sing);
       System.out.println(sing2);

    }

}


 

 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值