`

(面试题转)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软件工程师面试题

    java软件工程师面试编程题 写一个Singleton出来 Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类,它的构造函数为...

    java面试题以及技巧

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

    JAVA面试题最全集

    简述java编程中事件处理模式。 30.你编写过applet吗?applet的安全权限如何?试列举java application或者applet中与servlet/jsp通信可以采用的方式。 31.简述逻辑操作(如&,|)与条件操作(如&&,||)的区别。 32....

    java面试题大全(2012版)

    7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归算法题2 78 10、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 79 11、有数组a[n],用java代码将数组元素顺序颠倒 80 12.金额转换,阿拉伯数字的...

    java面试题及技巧4

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

    java面试题及技巧3

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

    Python经典面试题.doc

    1:Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模式:... 使用decorator来实现单例模式 def singleton(cls): instances = {} def getinstance(): if cls not in

    java面试题以及技巧6

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    java面试800题

    《java面试800题(包括java,数据库,前台等,绝对全面)》 Q0027 哪些SQL语句在执行时是自动提交的? 数据定义语言DDL是自动提交的。 Q0028 索引对数据库的影响? 提高查询速度 Q0029 主外键有什么关系? 外键是从...

    Java岗位常规面试题.pdf

    7. 什么是Java中的单例模式(Singleton Pattern)?请说明如何实现线程安全的单例模式。 8. Java中的什么机制实现了垃圾回收(Garbage Collection)?请解释垃圾回收的原理。 9. 请解释Java中的Synchronized关键字的...

    J2EE面试题集锦(附答案)

    一、基础问答 二、Java编程与程序运行结果  1.Java编程,打印昨天的当前时刻 ...写一个Singleton模式的例子 三、数据库  1.删除表的重复记录 2.delete from tablea & truncate table tablea的区别

    Java面试-代码与编程题.doc

    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类...

    破解Objective-C面试:笑到最后的技术攻略!.zip

    C、iOS开发、Mac OS X、编程语言、面向对象编程、内存管理、自动引用计数(ARC)、协议(protocol)、类扩展(category)、键值观察(KVO)、键值编码(KVC)、Block、Delegate模式、多态性、Singleton模式、异常...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    春招你必须掌握的Python经典面试题

    1:Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模式: 1/用类 class Singleton(type): def __init__(cls, name, bases, dict): super(Singleton, cls).__...

    Spring面试题

    3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,...

    java面试题目与技巧1

    │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...

Global site tag (gtag.js) - Google Analytics