gpt4 book ai didi

c# - 工厂模式 : Determining concrete factory class instantiation?

转载 作者:行者123 更新时间:2023-11-30 16:33:38 26 4
gpt4 key购买 nike

我正在尝试学习模式,但我坚持要确定工厂模式如何或在何处确定要实例化的类。如果我有一个调用工厂并发送它的应用程序,比如说,一个 xml 配置文件来确定要采取什么类型的操作,那么解释配置文件的逻辑在哪里发生?

工厂

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace myNamespace
{
public abstract class SourceFactory
{
abstract public UploadSource getUploadSource();
}
public class TextSourceFactory : SourceFactory
{
public override UploadSource getUploadSource()
{
return new TextUploadSource();
}
}
public class XmlSourceFacotry : SourceFactory
{
public override UploadSource getUploadSource()
{
return new XmlUploadSource();
}
}
public class SqlSourceFactory : SourceFactory
{
public override UploadSource getUploadSource()
{
return new SqlUploadSource();
}
}
}

类(class)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace myNamespace
{
public abstract class UploadSource
{
abstract public void Execute();
}
public class TextUploadSource : UploadSource
{
public override void Execute()
{
Console.WriteLine("You executed a text upload source");
}
}
public class XmlUploadSource : UploadSource
{
public override void Execute()
{
Console.WriteLine("You executed an XML upload source");
}
}
public class SqlUploadSource : UploadSource
{
public override void Execute()
{
Console.WriteLine("You executed a SQL upload source");
}
}
}

最佳答案

要实例化的实际工厂是在运行时选择的,通常由单独的工厂加载器 类选择。加载程序可以获得必要的配置,例如在 xml 配置文件中,并从中读取要加载的具体工厂的类名。

这本身并不是一个很复杂的逻辑;将其放入工厂加载程序类的原因是可重用性。您的应用程序中可以有许多工厂,并且通常大多数工厂加载代码都非常相似,因此将其放入单独的类(层次结构)中可以消除代码重复。当然,逻辑可能与此示例不同且更复杂。

例如一个更动态的场景是在 xml 文件中指定按钮/菜单项和类名称之间的映射,然后在 GUI 上,用户可以通过按下按钮/选择菜单项来更改要使用的工厂。

关于c# - 工厂模式 : Determining concrete factory class instantiation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982313/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com