摘要:本文深入浅出的讲述了设计模式中的单例模式,并给出了简单的示例,例子浅显易懂,并附带源代码。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
       单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说,只有一个实例是很重要的,虽然系统中可以有许多打印机,但却只应该有一个打印机假脱机,只应该有一个文件系统和一个窗口管理器,一个数字滤波器只能有一个A/D转换器,一个会计系统只能专用于一个公司。怎样才能保证一个类只有一个实例并且这个实例易于被访问,一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象,一个更好的方法是让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法,这就是Singleton模式。
       实用性:在下面的情况下可以使用Singleton模式。
l         当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
l         当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
例如:一个产生随机数的例子,整个应用程序中只需要一个类的实例来产生随机数,客户端程序从类中获取这个实例,调用这个实例的方法nextInt(),公用的方法访问需要进行同步,这是单例模式需要解决的同步问题。
 
参与者:Singleton:定义一个Instance操作,允许客户访问它的唯一实例,Instance是一个类操作。可能负责创建自己的唯一实例。
协作关系:客户只能通过Singleton的Instance操作访问一个Singleton的实例。
使用Singleton模式有许多优点:
1.         对唯一实例的受控访问,
2.         缩小命名空间,
3.         允许对操作和表示的精化,
4.         允许可变数目的实例。
5.         比类操作更灵活。
代码:
       单例模式中需要解决的重要问题是方法的同步问题,同步的粒度有多大等。在本例子中同在获得类的实例的时候使用了同步,代码如下:
public class Singleton{
  private Singleton(){
    generator = new Random();
  }
  public void setSeed(int seed){
    generator.setSeed(seed);
  }
  public int nextInt(){
    return generator.nextInt();
  }
  public static synchronized Singleton getInstance(){
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
  private Random generator;
  private static Singleton instance;
}
客户端调用的代码:
package singleton;
public class Client{
    public static void main(String[] args){
       Singleton s1 = Singleton.getInstance();
       System.out.println(s1.toString());
       for(int i=0;i<10;i++){
           Singleton s2 = Singleton.getInstance();
           System.out.println("The randomed number is "+s2.toString());
       }
    }
}
总结:单例模式使得应用程序在运行时保持只能有一个实例,在一些大的应用程序中,主程序只需要有一个,因此需要使用单例模式

转载于:https://blog.51cto.com/tianli/43743

单例模式(singleton)解析例子相关推荐

  1. 设计模式之——单例模式(Singleton)的常见应用场景(转):

    单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...

  2. 设计模式(21):创建型-单例模式(Singleton)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  3. python3中的单例模式Singleton

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-01-21 09:09:09 # @Author : cdl (1217096 ...

  4. Android设计模式——单例模式(Singleton)

    二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元 ...

  5. 【设计模式】单例模式 Singleton Pattern

    通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance)  的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...

  6. python单例_Python - 单例模式(Singleton)

    单例模式(Singleton) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/23374575 单例模式 , 类的实例从始至终, ...

  7. 设计模式之单例模式——Singleton

                        设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...

  8. 单例设计模式 序列化破坏单例模式原理解析及解决方案?

    单例设计模式 序列化破坏单例模式原理解析及解决方案? 序列化和反序列化 反射的破坏

  9. 设计模式之单例模式(Singleton)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

最新文章

  1. java并发订单号生成
  2. leetcode 233 number of digit one
  3. [linux]查看linux下端口占用
  4. esxi添加网卡驱动
  5. C++极值minmax最大值最小值算法(附完整源码)
  6. 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题
  7. wince版本ffmpeg的编译 第四篇
  8. 采用无线网桥做监控有什么优势?无线网桥的组网模式有哪些?
  9. CV Code|计算机视觉开源周报20200501期
  10. linux 信号集 同步,linux信号集
  11. Ubuntu alias在/etc/profile重启无效解决
  12. @JsonIgnore和@JsonSerialize 的 区别
  13. VS附加依赖项以及Opencv配置问题
  14. uml 流程图符号 含义
  15. 【elementui】颜色选择器
  16. 线性代数 --- 用内积重新定义矩阵的转置(个人学习笔记)
  17. 22-兔子生兔子问题
  18. E18-D80NK红外避障传感器使用(附32单片机源码)
  19. MySQL 之 DQL
  20. Altium Designer 20 如何快速给不规则板框铺铜的方法,超级简单操作!

热门文章

  1. Mysql 从库跳过
  2. 数据结构与算法入门---数据结构类型
  3. L1-036 A乘以B
  4. c结构体里的数组与指针
  5. Mongodb基本操作说明
  6. 了解一下C++输入和输出的概念
  7. 如何加入Dave英语学习小组
  8. zoj 3620 Escape Time II
  9. 2009年SOA七大预测:SOA借力云计算
  10. [75] Making arrangements