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

标签 java c# .net

假设我有 2 个类:ValidatorAValidatorB,并且两者都具有相同的 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/

相关文章:

java - MySQL 在简单 INSERT 操作上非法混合排序规则 '='

c# - 代码分析因 RIA 而中断?

asp.net - .Net Full 框架和 K 运行时使用的 .Net Core Framework 4.5 之间的区别?

c# - 不区分大小写比较字符串和非字符串

c# - 在 Microsoft Word 文档中顺畅/直观地重复单词

.net - 如何从.NET解决方案构建 'dependency tree diagram'

c# - .NET 4.0 中的 WebHttpBinding?

java - 使用自定义 ListView 布局中的按钮增加 Int 的值

java - GridBagLayout 未将按钮锚定到 PAGE_END

java - 使用 JsonItemReader 解析文件名并处理每条记录