2007-12-03
(面试题转)Singleton模式
关键字: Singleton模式Singleton模式
2007-12-02 12:46
|
笔者前不久应聘某公司JAVA软件工程师时笔试就有这么一个题!"编程题: 写一个Singleton出来。"
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 java 代码
java 代码
定义一个类,它的构造函数为private的,所有方法为static的。 一般认为第一种形式要更加安全些. |
评论
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访问者模式
创建型模式
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访问者模式
chenchuxin
2007-12-04
5、SINGLETON—俺有6
Sigleton,她们只要说道“
么好的事)
个漂亮的老婆,她们的老公都是
老公”,都是指的同一个人,那
我,我就是我们家里的老公
就是我(刚才做了个梦啦,哪有这
单例模式:单例模式确
实例单例模式。单例模式只
保某一个类只有一个实例,而且
应在有真正的“单一实例”的需
自行实例化并向整个系统提供这个
求时才可使用。
Sigleton,她们只要说道“
么好的事)
个漂亮的老婆,她们的老公都是
老公”,都是指的同一个人,那
我,我就是我们家里的老公
就是我(刚才做了个梦啦,哪有这
单例模式:单例模式确
实例单例模式。单例模式只
保某一个类只有一个实例,而且
应在有真正的“单一实例”的需
自行实例化并向整个系统提供这个
求时才可使用。
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!
那么,如何才能步入设计模式的殿堂?设计模式是资深程序员日积月累总结出来的一套可复用的、针对面向对象软件设计的解决方案,从这个意义上说,世界上存在无数多的设计模式,"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!
发表评论
- 浏览: 22235 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
链接
最新评论
-
一位软件工程师的6年总结 ...
沙发 顶 ...........
-- by bei79 -
学习J2ME可以从事的工作种 ...
关于J2ME程序员新手开发入门的几大要点 一、J2ME中需要的Java基础知 ...
-- by chenchuxin -
学习J2ME可以从事的工作种 ...
J2ME学习之温故而知新篇 学习J2ME最重要的部分是掌握J2ME的体系结构 ...
-- by chenchuxin -
学习J2ME可以从事的工作种 ...
目前從事第二個選項。糾正:應用開發一樣要熟練掌握低級界面編程。
-- by hzxdark -
(转)如何学习J2EE
说的比较通俗,但感觉只是谈到了一些名词概念而已。
-- by Ethip






评论排行榜