假设我有 2 个类:ValidatorA
、ValidatorB
,并且两者都具有相同的 Validate
函数声明:public void Validate (字符串输入)
(从而实现相同的接口(interface))。
如何创建一个获取类型名称的单点,并将其发送到它应该使用的适当的Validate
方法? (如果我不想使用“switch-case”...)
例如:
输入“Bla”应激活 ValidatorA 方法
类型“Bla2”应激活 ValidatorB 方法
输入“Bla3”应激活 ValidatorA 方法
附言
我考虑过在类中使用字典,并在构造函数中初始化它,例如:
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实例。
最佳答案
您可以为此使用工厂模式。为 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();
并且您可以使用此实例调用单独的验证方法。
ex: validateObject.Validate();
希望这对您有帮助......
关于java - 用于创建特定类型对象的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33199153/