用于特定类型对象创建的设计模式

本文关键字:创建 设计模式 对象 类型 用于 | 更新日期: 2023-09-27 18:18:16

假设我有两个类:ValidatorA, ValidatorB,并且它们都有相同的Validate函数声明:public void Validate(string input)(从而实现相同的接口)。

我如何创建一个单点,将得到一个类型名称,并将其发送到适当的Validate方法,它应该使用?(如果我不想使用"switch-case"…)

例如:

输入"Bla"应该激活ValidatorA方法

Type "Bla2"应该激活ValidatorB方法

Type "Bla3"应该激活ValidatorA方法

p。S

我考虑在类中使用字典,并在构造函数中初始化它,如:

Dictionary<string,IValidator> dic = new Dictionary<string,IValidator>();
dic["Bla"] = new ValidatorA();
dic["Bla2"] = new ValidatorB();
dic["Bla3"] = new ValidatorA();

然后使用它:

公共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 = factoryclass . createobject ();

,您可以使用此实例调用单独的验证方法。

例:validateObject.Validate ();

希望这可能对你有帮助…