假设我有两个类:ValidatorA
,ValidatorB
,并且两者都具有Validate
函数的相同声明:public void Validate(string input)
(因此实现相同的接口)。
如何创建一个获得类型名称的单点,并将其发送到应该使用的相应Validate
方法? (如果我不想使用“switch-case”......)
例如:
类型“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();
然后使用它:
public void OnePoint(字符串类型,字符串输入) { DIC [类型] .Validate(输入); }
但是这样它只允许我为一个类型的 SINGLE 实例。
答案 0 :(得分:1)
您可以使用工厂模式。为Validator1和Validator2类创建一个基类,在该类中,您可以编写validate方法。使它成为虚拟的,这样你就可以在单独的类中覆盖该方法。
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();
您可以使用此实例调用单独的验证方法。
ex:validateObject.Validate();
希望这可能对你有帮助......