设计模式-Singleton模式(只有一个实例)

原创 2017年07月08日 19:46:10

顾名思义,单例模式也就是在任何情况下都绝对只有一个实例。
Singleton模式对实例的数量就行限制的原因是:当存在多个实例时,实例之间会相互影响,可能会产生意想不到的的Bug;如果此时,能够确保有且只有一个实例,就可以在这个前提下放心编程了。

以下面的程序为例,进行简单的说明:

package GoF;
/**
 * 单例模式
 * @author xminyang
 *
 */
public class Singleton {
    private static Singleton singleton=new Singleton();
    private Singleton(){
        System.out.println("生成一个实例。");
    }
    public static Singleton getInstance(){
        return singleton;
    }
}
package GoF;

public class SingletonMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("开始:");
        Singleton singleton1=Singleton.getInstance();
        //第一次运行getInstance()时,Singleton类会被初始化,此时,static字段的singleton被初始化,
        //且生成了唯一的一个实例
        Singleton singleton2=Singleton.getInstance();

        if(singleton1==singleton2){
            System.out.println("singleton1和singleton2具有相同的实例。");
        }else {
            System.out.println("singleton1和singleton2具有不同的实例。");
        }

        System.out.println("结束。");
    }


}

运行结果:

这里写图片描述

Singleton类只会生成一个实例。Singleton类定义了static字段singleton,并将其初始化为Singleton类的实例,初始化行为仅在该类被加载时进行一次。

Singleton类的构造函数是private属性,这是为了禁止从Singleton类外部调用构造函数。若程序猿非常谨慎,至始至终不会使用new关键字生成实例,就无需定义构造函数为private。但这样的话,Singleton模式也就没有意义了。Singleton模式的作用在于确保任何情况下都只能生成一个实例,所以,必须设置构造函数为private。

getInstance方法,以便于程序猿从Singleton类外部获取Singleton类唯一的实例。

在Singleton模式中,只有Singleton这一个角色,且有一个返回唯一实例的static方法,该方法总是会返回同一个实例。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java 写一个单例模式(Singleton)出来

第一种:饱汉模式 public class SingleTon {  private SingleTon(){ } //实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间 ...
  • zpf336
  • zpf336
  • 2014年09月25日 21:41
  • 7720

设计模式(创建型)之单例模式(Singleton Pattern)

单例模式可能是23种设计模式中最简单的。应用也非常广泛,譬如Android中的数据库访问等操作都可以运用单例模式。核心概念: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称...
  • yanbober
  • yanbober
  • 2015年04月27日 16:50
  • 2566

单例模式Singleton Pattern 在多线程下的问题

单例模式很简单,一般简单概括为如下:
  • u013147914
  • u013147914
  • 2014年04月23日 01:41
  • 1135

Singleton设计模式(一个类只允许一个实例)

Singleton设计模式 我们知道,Singleton设计模式要求一个类class只能有一个实例instance存在,下面用C++来实现: #include #include u...
  • ForgotAboutGirl
  • ForgotAboutGirl
  • 2011年09月16日 01:03
  • 2815

C++设计模式5--单例模式Singleton--当前对象只有一个实例 .

很多情况下,我们在开发项目的过程中,都希望自己运行的某个部件只有一个实例, 比如我们天天用QT开发界面,QTCreate里帮助菜单下的关于Qt Create菜单,弹出来的关于对话框,在QTCreat...
  • zhs362625119
  • zhs362625119
  • 2014年06月06日 00:04
  • 346

C++设计模式5--单例模式Singleton--当前对象只有一个实例

很多情况下,我们在开发项目的过程中,都希望自己运行的某个部件只有一个实例, 比如我们天天用QT开发界面,QTCreate里帮助菜单下的关于Qt Create菜单,弹出来的关于对话框,在QTCreate...
  • gatieme
  • gatieme
  • 2014年01月08日 13:25
  • 21424

深入浅出单实例Singleton设计模式

单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比...
  • goodmentc
  • goodmentc
  • 2015年06月30日 00:04
  • 575

单实例Singleton设计模式深入浅出

前序 单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然...
  • zongxiao08
  • zongxiao08
  • 2013年02月11日 19:36
  • 136

深入浅出单实例Singleton设计模式

深入浅出单实例Singleton设计模式 陈皓 单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整...
  • u014357995
  • u014357995
  • 2015年09月22日 14:09
  • 338

深入浅出单实例Singleton设计模式

单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比...
  • prike
  • prike
  • 2015年11月16日 16:25
  • 129
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式-Singleton模式(只有一个实例)
举报原因:
原因补充:

(最多只允许输入30个字)