Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 工厂方法模式的实际用途是什么?_Design Patterns - Fatal编程技术网

Design patterns 工厂方法模式的实际用途是什么?

Design patterns 工厂方法模式的实际用途是什么?,design-patterns,Design Patterns,我对设计模式很陌生。我刚遇到工厂设计模式。我知道它将实例化委托给子类。但我没有得到该模式的实际应用。在哪些场景中可以使用此模式以获得良好效果。我听说过模式滥用,不想沉迷于此。有人能举一个现实世界中常用的例子吗 我只是在一个调度应用程序中使用它,其中要调度的任务位于单独的程序集中,而调度程序对任务一无所知。。。它从外部源获取在其中定义任务的程序集的名称,然后动态加载程序集,使用定义良好的接口实例化该程序集中的类。调度器中的工厂方法将程序集名称作为输入参数,返回加载程序集中类的实例 。。但是有这么多

我对设计模式很陌生。我刚遇到工厂设计模式。我知道它将实例化委托给子类。但我没有得到该模式的实际应用。在哪些场景中可以使用此模式以获得良好效果。我听说过模式滥用,不想沉迷于此。有人能举一个现实世界中常用的例子吗

我只是在一个调度应用程序中使用它,其中要调度的任务位于单独的程序集中,而调度程序对任务一无所知。。。它从外部源获取在其中定义任务的程序集的名称,然后动态加载程序集,使用定义良好的接口实例化该程序集中的类。调度器中的工厂方法将程序集名称作为输入参数,返回加载程序集中类的实例


。。但是有这么多的用途和使用方法。。这种模式

我用它作为应用程序的插件。。。通过这种方式,您可以让主应用程序调用类工厂来实例化特定插件,该插件实现您在主应用程序中开发的某些接口。这样,您就可以对应用程序的主要部分进行编码,而无需知道要插入的内容。

工厂模式对于将容量映射到适当的处理程序非常有用。

假设您有一个队列,其中包含
task
类型的对象

现在,出于各种原因,您可以将
task
子类化。如果您是从数据库等源加载任务,则可以使用工厂来确定要加载的任务类型

例如:

private IEnumerable<Task> GetTasks(DataTable Table){

  Task NewTask;

  foreach(DataRow Row in Table){
    switch(tasktype){
      case tasktypes.TaskTypeA:
        NewTask = NewTaskA(...);
        break;

      case TaskTypes.TaskTypeB:
        NewTask = NewTaskB(...);
        break;
      ...
    }

    yield return NewTask;
  }
}
private IEnumerable GetTasks(数据表){
任务任务;
foreach(表中的数据行){
开关(任务类型){
案例tasktypes.TaskTypeA:
新任务=新任务(…);
打破
案例TaskTypes.TaskTypeB:
NewTask=NewTaskB(…);
打破
...
}
收益率;
}
}
稍后,您可以对队列中的任务调用虚拟方法,例如“消费”或“流程”


工厂方法(在本例中)的优点是,您只需打开一次任务类型(当创建任务时),并让多态性处理大多数其他事情。

无可否认,由于C的工作方式,不再需要实际使用模式描述的更痛苦的实现细节,但是我的SQLDAL功能将对象工厂(和SQL命令)传递给使用工厂来生成对象的实用程序函数。如果我没有使用C#,我想我可以使用一个显式的工厂类来生成对象。

即在以下两种情况中的一种:

  • 您的类不知道要创建的对象的类型,但它只需要一个“完成任务”的对象。EMF在大量使用这种模式时会跃入人们的脑海
  • 您希望类的子类确定要使用的对象的类型。i、 e.您在编写父类时不知道将创建什么具体产品,这将是具体创建者的责任

  • 您仍然可以在不为实例化指定类的情况下执行相同的操作吗?