静态类工厂的实例解释.
上次我写了一篇关于静态类工厂的文章,
谢谢大家的关心,不过有很多的读者都表示看不太懂,我这里举一个详细的例子
和他家讨论一下.如果大家在自己的项目中有用到这样的模式的话,有兴趣可以
展示出来,大家一起讨论,谢谢.
我这里的例子是微软的ExceptionBuilder类,这是一个完全有静态方法组成的类.
而且所有方法都返回一个Exception的类.
例如其中的一个方法
internal class ExceptionBuilder
{
public static Exception ArgumentNull(string arg);
}
{
public static Exception ArgumentNull(string arg);
}
从函数的定义来看,很容易看出其实他返回的是一个ArgumentNullException的类,
当然ArgumentNullException是Exception的一个子类.
现在我们要应用这个类来抛出一个异常类了,例
public class DataTableCollection
{
private void ArrayAdd(DataTable)
{
throw ExceptionBuilder.ArgumentNull("table");
}
}
{
private void ArrayAdd(DataTable)
{
throw ExceptionBuilder.ArgumentNull("table");
}
}
几乎所有的异常的类都可以包括在ExceptionBuilder中.例:
public static Exception AddNewNotAllowNew();
public static Exception AutoIncrementDataType();//Argument异常类.
通过类方法可以很方便的调用并且可以不需要知道其中的细节.
同时可以对相同的异常类调用不同的参数.例
internal class ExceptionBuilder
{
protected static Exception _Data(string error)
{
return ExceptionBuilder.Trace(new DataException(error));
}
private static Exception _Trace(Exception e)
{
return e;
}
public static Exception AddNewAddNew()
{
return ExceptionBuilder._Data(Res.GetString("DataView_AddNewAddNew"));
}
public static Exception AddNewNotAllowNull()
{
return ExceptionBuilder._Data(Res.GetString("DataView_AddNewNotAllowNull"));
}
}
{
protected static Exception _Data(string error)
{
return ExceptionBuilder.Trace(new DataException(error));
}
private static Exception _Trace(Exception e)
{
return e;
}
public static Exception AddNewAddNew()
{
return ExceptionBuilder._Data(Res.GetString("DataView_AddNewAddNew"));
}
public static Exception AddNewNotAllowNull()
{
return ExceptionBuilder._Data(Res.GetString("DataView_AddNewNotAllowNull"));
}
}
这里我们只要调用不同的静态方法,就很容易获得表示不同情况的DataException类,来区分在
我们是在哪里捕捉到这个异常的.
欢迎大家来讨论这种写法的优缺点,谢谢!