`

(面试题转)Singleton模式

阅读更多
Singleton模式
2007-12-02 12:46
笔者前不久应聘某公司JAVA软件工程师时笔试就有这么一个题!"编程题: 写一个Singleton出来。"
Singleton
模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
java 代码
  1. public class Singleton {   
  2.           private Singleton(){   
  3.           }   
  4.       //在自己内部定义自己一个实例,是不是很奇怪?   
  5.       //注意这是private 只供内部调用   
  6.       private static Singleton instance = new Singleton();   
  7.       //这里提供了一个供外部访问本class的静态方法,可以直接访问     
  8.       public static Singleton getInstance() {   
  9.         return instance;      
  10.       }    
  11.     }    
第二种形式:
java 代码
  1. public class Singleton {    
  2.   private static Singleton instance = null;   
  3.   public static synchronized Singleton getInstance() {   
  4.   //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次        
  5.   //使用时生成实例,提高了效率!   
  6.   if (instance==null)   
  7.     instance=new Singleton();   
  8.       return instance;      
  9.      }    
  10. }    
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些.

分享到:
评论
3 楼 chenchuxin 2007-12-04  
Java的23种设计模式

创建型模式
FACTORY工厂模式
BUILDER建造模式
FACTORY METHOD工厂方法模式
PROTOTYPE原始模型模式
SINGLETON单例模式

结构型模式
ADAPTER适配器(变压器)模式
BRIDGE桥梁模式
COMPOSITE合成模式
DECORATOR装饰模式
FACADE门面模式
FLYWEIGHT享元模式
PROXY代理模式

行为模式
CHAIN OF RESPONSIBLEITY责任链模式
COMMAND命令模式
INTERPRETER解释器模式
ITERATOR迭代子模式
MEDIATOR调停者模式
MEMENTO备忘录模式
observe 观察者模式
STATE状态模式
STRATEGY策略模式
TEMPLATE METHOD模板方法模式
VISITOR访问者模式
2 楼 chenchuxin 2007-12-04  
5、SINGLETON—俺有6
Sigleton,她们只要说道“
么好的事)
个漂亮的老婆,她们的老公都是
老公”,都是指的同一个人,那

我,我就是我们家里的老公
就是我(刚才做了个梦啦,哪有这


  单例模式:单例模式确
实例单例模式。单例模式只
保某一个类只有一个实例,而且
应在有真正的“单一实例”的需
自行实例化并向整个系统提供这个
求时才可使用。


1 楼 chenchuxin 2007-12-03  
相信大多数拜读过"Gang Of Four"(Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)的经典之作《Design Pattern》的同僚们,对这本书一定推崇有加。曾有人这么宣告:"只有在读过《Design Pattern》后,我的编程水平才真正得到了质的飞跃。"
  那么,如何才能步入设计模式的殿堂?设计模式是资深程序员日积月累总结出来的一套可复用的、针对面向对象软件设计的解决方案,从这个意义上说,世界上存在无数多的设计模式,"Gang Of Four"总结的23种设计模式只是其中的23个精华。入手的关键就在于领会"设计模式"的思想,然后再将它们融会贯通、灵活应用到自己到开发过程中。
  --------------------------------------------------------------------------------
  Singleton模式
  Singleton可以说是《Design Pattern》中最简单也最实用的一个设计模式。那么,什么是Singleton?
  顾名思义,Singleton就是确保一个类只有唯一的一个实例。Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。很多时候我们都会需要Singleton模式,最常见的比如我们希望整个应用程序中只有一个连接数据库的Connection实例;又比如要求一个应用程序中只存在某个用户数据结构的唯一实例。我们都可以通过应用Singleton模式达到目的。
  一眼看去,Singleton似乎有些像全局对象。但是实际上,并不能用全局对象代替Singleton模式,这是因为:其一,大量使用全局对象会使得程序质量降低,而且有些编程语言例如C#,根本就不支持全局变量。其二,全局对象的方法并不能阻止人们将一个类实例化多次:除了类的全局实例外,开发人员仍然可以通过类的构造函数创建类的多个局部实例。而Singleton模式则通过从根本上控制类的创建,将"保证只有一个实例"这个任务交给了类本身,开发人员不可能再有其它途径得到类的多个实例。这一点是全局对象方法与Singleton模式的根本区别。
  --------------------------------------------------------------------------------
  Singleton模式的实现
  Singleton模式的实现基于两个要点:
  1)不直接用类的构造函数,而另外提供一个Public的静态方法来构造类的实例。通常这个方法取名为Instance。Public保证了它的全局可见性,静态方法保证了不会创建出多余的实例。
  2)将类的构造函数设为Private,即将构造函数"隐藏"起来,任何企图使用构造函数创建实例的方法都将报错。这样就阻止了开发人员绕过上面的Instance方法直接创建类的实例。
  通过以上两点就可以完全控制类的创建:无论有多少地方需要用到这个类,它们访问的都是类的唯一生成的那个实例。以下C#代码展现了两种实现Singleton模式的方式,开发人员可以根据喜好任选其一。
  实现方式一:Singleton.cs
  using System;
  class SingletonDemo
  {private static SingletonDemo theSingleton = null;
  private SingletonDemo() {}
  public static SingletonDemo Instance()
  {if (null == theSingleton)
  {
  theSingleton = new SingletonDemo();
  }
  return theSingleton;
  }
  static void Main(string[] args)
  {SingletonDemo s1 = SingletonDemo.Instance();
  SingletonDemo s2 = SingletonDemo.Instance();
  if (s1.Equals(s2))
  {Console.WriteLine("see, only one instance!");
  }
  }
  }
  与之等价的另外一种实现方式是:Singleton.cs:
  using System;
  class SingletonDemo
  {private static SingletonDemo theSingleton = new SingletonDemo();
  private SingletonDemo() {}
  public static SingletonDemo Instance()
  {return theSingleton;
  }
  static void Main(string[] args)
  {SingletonDemo s1 = SingletonDemo.Instance();
  SingletonDemo s2 = SingletonDemo.Instance();
  if (s1.Equals(s2))
  {Console.WriteLine("see, only one instance!");
  }
  }
  }
  编译执行:
  Csc Singleton.cs
  得到运行结果:
  see, only one instance!

相关推荐

    singleton面试题转

    Singleton模式是一种常用的设计模式,它的核心目标是在Java应用程序中确保某个类只有一个实例存在,并提供一个全局访问点。这种模式在很多场景下非常有用,比如管理共享资源、配置中心或者线程池等。以下是对...

    前端大厂最新面试题-Singleton Pattern.docx

    Singleton Pattern单例模式详解 Singleton Pattern单例模式是一种创建型设计模式,提供了一种创建对象的最佳方式。该模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建在应用程序运行...

    前端大厂最新面试题-singleton.docx

    单例模式是软件设计模式中的一种经典模式,它在前端开发中被广泛应用,尤其是在大型项目和框架中。...在面试中,了解并能够灵活运用单例模式,不仅能展示你的设计模式理解,还能体现你在实际项目中的问题解决能力。

    十套c#面试题,基本包含了所有c#知识

    在面试题中,我们可以看到多种设计模式的概念,如 Singleton、抽象工厂、Bridge、Composite 等。Singleton 模式是一种创建型模式,用于创建一个独特的对象。抽象工厂模式是一种创建型模式,用于创建一组相关的对象。...

    面试题面试题面试题34

    Singleton模式确保一个类只有一个实例,并提供全局访问点。C#中,可以通过私有构造函数和静态工厂方法实现Singleton,同时考虑线程安全,可使用`lock`或`Lazy<T>`类。 5. **C#的垃圾回收机制**: C#的垃圾回收是...

    Java面试题-设计模式+设计原则+代理.pdf

    "Java面试题-设计模式+设计原则+代理.pdf" 设计模式是软件开发中的一种解决方案,它提供了一种通用的设计方法来解决常见的问题。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 1. Singleton 模式...

    10道Java面试必备的设计模式面试题!.zip

    以下是对这10道Java设计模式面试题的详细解释: 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供全局访问点。在Java中,可以使用双重检查锁定(Double-Checked Locking)、静态内部类或枚举来实现...

    设计模式面试题

    ### 设计模式面试题知识点详解 #### 一、设计模式概览及常见设计模式解析 在软件工程领域,设计模式是一套被广泛接受的解决特定问题的解决方案模板。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式...

    JavaSE 面试题 .docx

    JavaSE 面试题 JavaSE 面试题是 Java 语言的核心,涵盖...JavaSE 面试题涵盖了 Java 语言的基础知识点,包括变量、运算符、控制结构、方法、数组、String、面向对象编程等内容,同时也包括 Singleton 模式的实现方式。

    深圳各公司java面试题

    ### 深圳各公司Java面试题精要解析 #### 中联宏达 - Struts面试题解析 **1. 如何定义FormBean?** FormBean是Struts框架中用于封装表单数据的类,通常继承自`org.apache.struts.action.ActionForm`。定义FormBean...

    最全java面试题及答案(208道).pdf

    本文总结了Java面试题及答案,涵盖了Java基础、容器、多线程、反射、对象拷贝、JavaWeb、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/SpringCloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、...

    高级Java经典面试题2019

    本文总结了《高级Java经典面试题2019》中关于并发编程、JVM和Spring框架等方面的重要知识点。通过深入理解这些概念和技术,可以帮助开发者更好地掌握Java核心技术,提高面试竞争力。希望本文能为读者提供有益的帮助...

    python 面试题 题库

    以下是一些关于Python面试题的相关知识点: 1. **单例模式**: 单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。在Python中,可以通过元类或者装饰器来实现。第一种方法利用元类Singleton,...

    整理C#面试题10套

    "C#面试题10套" 本资源摘要信息涵盖了C#面试题10套,涵盖了C#、.NET、面试题...本资源摘要信息涵盖了C#、.NET、面试题等知识点,涉及到逻辑思维、规则应用、加密解密算法、软件架构、设计模式、数据库操作等技术领域。

    黑马面试题总结

    ### 黑马面试题总结 #### 一、进程与线程状态 **知识点:** - **进程与线程的区别:** - **进程**:是系统进行资源分配和调度的基本单位,每个进程都有独立的代码和数据空间(程序上下文)。 - **线程**:是...

    JAVA工程师面试题和一些经典题

    在Java工程师的面试中,单例模式和多线程是两个非常重要的知识点,它们既是基础,也是进阶技能,往往能体现一个开发者的编程素养和技术深度。以下将详细阐述这两个主题。 **单例模式** 单例模式是一种设计模式,它...

    10道Java面试必备的设计模式面试题!.pdf

    本文将对 Java 设计模式面试题进行解析,涵盖了单例模式、观察者模式、工厂模式、装饰器模式等常见设计模式,并对每个模式的定义、应用场景和实现方式进行了详细的解释。 一、单例模式(Singleton pattern) 单例...

    java面试题之代码与编程题

    在这篇文章中,我们将讨论Java面试题中的一些代码与编程题,涵盖Singleton模式、继承时类的执行顺序问题、内部类的实现方式等几个方面。 Singleton模式 Singleton模式是一种常用的设计模式,主要作用是保证在Java...

    java软件工程师面试题

    以上就是关于Java软件工程师面试题中涉及的Singleton模式、类的执行顺序以及内部类的知识点详解。掌握这些概念对于理解和编写高质量的Java代码至关重要。在面试中,理解并能灵活运用这些知识点,将有助于展示你的...

    java程序员面试题

    Java程序员面试题是一个涵盖广泛领域的主题,涉及到Java基础、Web开发、设计模式、数据库和框架等多个方面。以下是对这些文件内容的详细解析: 1. **Model1-CoreJava.doc & Model1-CoreJava-answer.doc**: 这部分...

Global site tag (gtag.js) - Google Analytics