gpt4 book ai didi

c# - 对工厂方法设计模式的反射(reflection)

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:20 25 4
gpt4 key购买 nike

我找到的所有工厂方法模式的例子也是抽象工厂模式的例子。

看这个:

static void Main(string[] args) {
IFactory factory = new ConcreteFactory();
IProduct product = factory.CreateProduct(); // <== factory method pattern??
ProcessProduct(product);

Console.ReadKey();
}

我可以说这行代码:

IProduct product = factory.CreateProduct();

完全体现了工厂方法模式的“精神”?

此处,工厂在代码不知道特定对象类型的情况下创建 Product 对象。

如果是这样,那么就难怪它们为什么会重叠,因为作者需要一种构建工作示例的方法。

我正在为我工​​作的公司制作定义词典。

最佳答案

虽然您提供的示例在技术上是工厂方法,但它不是很有用。设计模式只有在可以简化目标应用程序/功能的开发时才有用。

一般来说,工厂方法实现的好处来自于:

  1. 标准化对象的创建逻辑
  2. 为对象构造提供语义上有意义的接口(interface)

尚不清楚不带参数的实例方法如何可能比默认构造函数增加优势。

看看 C# example from the Wikipedia Factory Method article . (复制+粘贴在下面)

public class Complex
{
public double real;
public double imaginary;

public static Complex FromCartesianFactory(double real, double imaginary)
{
return new Complex(real, imaginary);
}

public static Complex FromPolarFactory(double modulus, double angle)
{
return new Complex(modulus * Math.Cos(angle), modulus * Math.Sin(angle));
}

private Complex(double real, double imaginary)
{
this.real = real;
this.imaginary = imaginary;
}
}

Complex product = Complex.FromPolarFactory(1, Math.PI);

它很有用,因为它指定了两个工厂方法,每个方法都有明确定义的参数,以及如何使用这些参数来构造定义明确的对象的有效实例的明确解释。此外,构造函数是private,而工厂方法是static,这确保了构造该对象实例的唯一方法是使用工厂方法。虽然它并不特别适用于此示例(因为所有可能的 double 参数值都是有效的),但将验证逻辑也放在工厂方法或构造函数中也是有意义的。

一般来说,工厂方法的目的是通过封装对象构造来降低代码复杂性,目前尚不清楚您提供的示例如何实现该目标。

关于c# - 对工厂方法设计模式的反射(reflection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169633/

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