假设我有两个类:ValidatorA、ValidatorB,它们都有相同的Validate函数声明:public void Validate(string input) (因此实现了相同的接口)。
如何创建一个获得类型名称的单点,并将其发送到它应该使用的适当的Validate方法?(如果我不想使用“开关箱”.)
例如:
输入"Bla“应激活ValidatorA方法
输入"Bla2“应激活ValidatorB方法
输入"Bla3“应激活ValidatorA方法
P.S
我考虑在类中使用字典,并在构造函数中插入它,例如:
Dictionary<string,IValidator> dic = new Dictionary<string,IValidator>();
dic["Bla"] = new ValidatorA();
dic["Bla2"] = new ValidatorB();
dic["Bla3"] = new ValidatorA();然后使用它:
公共空OnePoint(字符串类型,字符串输入){dictype.Validate(输入);}
但通过这种方式,它只允许为类型提供一个单个实例。
发布于 2015-10-18 15:13:40
您可以为此使用工厂模式。为Validator1和Validator2类创建一个基类,在该类中可以编写验证方法。将其变为虚拟方法,以便可以在单独的类中重写该方法。
public class BaseClass
{
public virtual void Validate()
{
throw new exception("not implemented");
}
}
public class Validate1 : BaseClass
{
public ovrerride void Validate()
{
// your validation code
}
}
public class Validate2 : BaseClass
{
public ovrerride void Validate()
{
// your validation code
}
}创建另一个工厂类以创建单独的对象。
public static class Factory()
{
public static BaseClass CreateObject()
{
// create your validate1 and validate2 objects in here. use if or switch-case according to your requirement.
return validate1 or validate2
}
}您可以调用工厂类并根据需要创建Validate1或Validate2对象。
BaseClass validateObject = FacctoryClass.CreateObject();
您可以使用此实例调用单独的验证方法。
例: validateObject.Validate();
希望这对你有帮助..。
https://stackoverflow.com/questions/33199153
复制相似问题