设计模式[创建型]之单件模式
2006-07-24 12:06
459 查看
从某种意义上来说,单件模式是限制而不是改进类的创建。它可以保证一个类有切且仅有一个实例,并提供一个访问它的全局访问点。像这样的情况在实际程序设计中是常常遇到的。
一般来说,可以通过使用静态方法来创建单件模式:
要让一个类只有一个实例,最容易的方法就是在类中嵌入一个静态变量,并在第一个类实例中设置该变量,而且每次进入构造函数都要进行检查。不管类有多少个实例,静态变量只能有一个实例。同时为了防止类被多次实例化,我们需要把构造函数申明为私有的,这样以后就只能在类的静态方法里创建一个实例,如:
public class kimTest{
private static bool instance=false;
private kimTest(){}
public static kimTest getObject()
{
if(!instance)
return new kimTest();
else
return null;
}
这个方法的优点在于如果单件已经存在,不需要在考虑异常处理了,因为只不过是从getObject()方法返回了一个空值而已。
kimTest obj=kimTest.getObject();
if(obj!=null)
{
Console.WriteLine(
.)
}
else
{
..}
上面的方法有个缺点,需要我们去检查getObject()方法的返回值,以确保它不是空的。这样可以采用一种变通的方法:创建这样一个类,如果试图多次实例化该类,它会抛出一个异常。
public class SingletonException:Exception
{
public SingletonException(string s):base (s)
{}
}
这样除了通过base调用了父类的构造函数外,新的异常类实际上什么也不做。
于是上面的方法可以实现为:
public class kimTest{
static bool instance=false;
public kimTest()
{
if(instance)
throw new SingletonException("only one allowed");
else
instance=true;
}
}
一般来说,可以通过使用静态方法来创建单件模式:
要让一个类只有一个实例,最容易的方法就是在类中嵌入一个静态变量,并在第一个类实例中设置该变量,而且每次进入构造函数都要进行检查。不管类有多少个实例,静态变量只能有一个实例。同时为了防止类被多次实例化,我们需要把构造函数申明为私有的,这样以后就只能在类的静态方法里创建一个实例,如:
public class kimTest{
private static bool instance=false;
private kimTest(){}
public static kimTest getObject()
{
if(!instance)
return new kimTest();
else
return null;
}
这个方法的优点在于如果单件已经存在,不需要在考虑异常处理了,因为只不过是从getObject()方法返回了一个空值而已。
kimTest obj=kimTest.getObject();
if(obj!=null)
{
Console.WriteLine(
.)
}
else
{
..}
上面的方法有个缺点,需要我们去检查getObject()方法的返回值,以确保它不是空的。这样可以采用一种变通的方法:创建这样一个类,如果试图多次实例化该类,它会抛出一个异常。
public class SingletonException:Exception
{
public SingletonException(string s):base (s)
{}
}
这样除了通过base调用了父类的构造函数外,新的异常类实际上什么也不做。
于是上面的方法可以实现为:
public class kimTest{
static bool instance=false;
public kimTest()
{
if(instance)
throw new SingletonException("only one allowed");
else
instance=true;
}
}
相关文章推荐
- 设计模式(六):Singleton 单件模式 -- 创建型模式
- 设计模式系列一创建型之(单件模式)
- 设计模式(四)原型模式Prototype(创建型)
- [设计模式] 设计模式面面观(3):单件模式(Singletion)-创建型模式
- 设计模式(一)工厂模式Factory(创建型)
- C#面向对象设计模式第二讲:Singleton Pattern单件模式(创建型模式)
- 创建型模式之单件模式(Singleton Pattern )C++实现
- 设计模式系列:单件模式
- 创建型模式:单件模式
- 设计模式(二)单件模式Singleton(创建型)
- (创建型模式)Singleton 单件模式
- 设计模式(创建型)之单例模式(Singleton Pattern)
- 设计模式(创建型)之原型模式(Prototype Pattern)
- 设计模式(一)工厂模式Factory(创建型)
- 设计模式C++ 笔记一 创建型模式(Factory、abstract factory、singleton)
- 设计模式笔记(2)---单件模式(创建型)
- 设计模式(创建型模式)
- 设计模式-创建型模式:工厂方法FactoryMethod
- 设计模式--创建型-SINGLETON(单件)
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 抽象工厂模式(Abstract Factory) - Java实现