`

单例模式

阅读更多

摘要:本文深入浅出的讲述了设计模式中的单例模式,并给出了简单的示例,例子浅显易懂,并附带源代码。
       单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说,只有一个实例是很重要的,虽然系统中可以有许多打印机,但却只应该有一个打印机假脱机,只应该有一个文件系统和一个窗口管理器,一个数字滤波器只能有一个A/D转换器,一个会计系统只能专用于一个公司。怎样才能保证一个类只有一个实例并且这个实例易于被访问,一个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象,一个更好的方法是让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法,这就是Singleton模式。
       实用性:在下面的情况下可以使用Singleton模式。
l         当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
l         当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
例如:一个产生随机数的例子,整个应用程序中只需要一个类的实例来产生随机数,客户端程序从类中获取这个实例,调用这个实例的方法nextInt(),公用的方法访问需要进行同步,这是单例模式需要解决的同步问题。
 
参与者:Singleton:定义一个Instance操作,允许客户访问它的唯一实例,Instance是一个类操作。可能负责创建自己的唯一实例。
协作关系:客户只能通过SingletonInstance操作访问一个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());
       }
    }
}
总结:单例模式使得应用程序在运行时保持只能有一个实例,在一些大的应用程序中,主程序只需要有一个,因此需要使用单例模式

分享到:
评论

相关推荐

    单例模式单例模式单例模式

    单例模式单例模式单例模式单例模式单例模式单例模式单例模式单例模式

    C#单例模式详解 C#单例模式详解C#单例模式详解

    C#单例模式C#单例模式详解C#单例模式详解C#单例模式详解

    单例模式详解~~单例模式详解~~

    单例模式详解~~单例模式详解~~单例模式详解~~

    43丨单例模式(下):如何设计实现一个集群环境下的分布式单例模式?1

    2020-02-10 王争设计模式之美进入课程讲述:冯永吉时长 10:21大小 8.31M上两节课中,我们针对单例模式,讲解了单例的应用场景、几种常见的代码实现

    单例模式实现mdi界面子窗体控制

    首先向关注过我这个系列...这立刻让我想到了最常用也是最简单最容易理解的一个设计模式 单例模式 何为 单例模式 ? 故名思议 即 让 类 永远都只能有一个实例。 由于 示例代码 比较简单 我也加了注释,这里就不在赘述

    单例模式,single

    单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化(serialization)时...

    单例模式的多种实现.docx

    单例模式的七种实现方法以及分析,可以作文大作业提交 1.前言 4 1.1 课题的研究背景 4 1.2 课题主要研究目标 4 2.相关技术简介 4 2.1Java简介 4 2.2IDEA简介 4 3. 单例模式的7种实现方式 5 3.1饿汉式(使用静态常量...

    java单例模式实例

    一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。

    单例模式--只能弹出一个窗体

    单例模式--只能弹出一个窗体 只能弹出一个窗体

    7种单例模式

    设计模式之七种单例模式代码及ppt,包含多线程环境测试和反序列化测试

    设计模式单例模式和工厂模式综合应用

    单例模式和工厂模式结合应用,实现了产品的生产,适合用做课程设计,包含详细文档和代码。Java语言。喜欢的可以下载来看看那

    几种单例模式demo

    几种单例模式的书写方式

    单例模式连接数据库步骤

    单例模式连接数据库步骤 单例模式连接数据库步骤是指在Java项目中使用单例模式来连接数据库的步骤。单例模式是一种设计模式,它可以确保一个类只有一个实例,并提供了一个全局访问点来访问这个实例。在连接数据库时...

    使用单例模式创建学生管理系统(饿汉式、懒汉式)

    使用单例模式创建学生管理系统(饿汉式、懒汉式)

    php单例模式和工厂模式

    php单例模式php单例模式php单例模式php单例模式

    OOP单例模式和工厂模式

    模式就像是OOP开发人员的配方,每种模式都提供了所需的成分。模式对OOP开发人员尤其有用,因为它有助于创建稳定的API,...本章将介绍两种常用的模式:单例模式和工厂模式。前者被称为类的职责,后者被称为类的多态性。

    Qt qml Singleton 单例模式

    此示例展示了Qml 的单例模式(类似全局对象,只生成一次实例,可全局使用) surfsky.cnblogs.com

    单例模式代码实现

    这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看

    设计模式——单例模式

    是http://blog.csdn.net/lxq_xsyu/article/category/1544127博客中java设计模式的源代码。下载前请先看《设计模式——单例模式》一文。

    Java SE程序 单例模式

    Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...

Global site tag (gtag.js) - Google Analytics