首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定类型对象创建的设计模式

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

Stack Overflow用户
提问于 2015-10-18 14:32:11
回答 1查看 579关注 0票数 0

假设我有两个类:ValidatorAValidatorB,它们都有相同的Validate函数声明:public void Validate(string input) (因此实现了相同的接口)。

如何创建一个获得类型名称的单点,并将其发送到它应该使用的适当的Validate方法?(如果我不想使用“开关箱”.)

例如:

输入"Bla“应激活ValidatorA方法

输入"Bla2“应激活ValidatorB方法

输入"Bla3“应激活ValidatorA方法

P.S

我考虑在类中使用字典,并在构造函数中插入它,例如:

代码语言:javascript
复制
Dictionary<string,IValidator> dic = new Dictionary<string,IValidator>();
dic["Bla"] = new ValidatorA();
dic["Bla2"] = new ValidatorB();
dic["Bla3"] = new ValidatorA();

然后使用它:

公共空OnePoint(字符串类型,字符串输入){dictype.Validate(输入);}

但通过这种方式,它只允许为类型提供一个单个实例。

EN

回答 1

Stack Overflow用户

发布于 2015-10-18 15:13:40

您可以为此使用工厂模式。为Validator1和Validator2类创建一个基类,在该类中可以编写验证方法。将其变为虚拟方法,以便可以在单独的类中重写该方法。

代码语言:javascript
复制
 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
    }
 }

创建另一个工厂类以创建单独的对象。

代码语言:javascript
复制
 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();

希望这对你有帮助..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33199153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档