【发布时间】:2018-07-03 08:14:57
【问题描述】:
在阅读了许多关于 C# 中抽象工厂设计模式的帖子后,我正在写这个问题。我真的无法从所有这些帖子提供的示例中理解真实世界的用例。我所能看到的只是汽车/电脑/电话等的一些基本示例。我知道它们对于提供简单的解释很重要。但我真的无法将它映射到任何真实世界,因为如果我真的遵循这样的例子,当我想要引入新对象时,我的代码将每隔一周更改一次。
下面是它的示例代码
namespace ClassLibrary1
{
public interface AbstractProductA { }
public class ProductA1 : AbstractProductA { }
public class ProductA2 : AbstractProductA { }
public interface AbstractProductB { }
public class ProductB1 : AbstractProductB { }
public class ProductB2 : AbstractProductB { }
public interface AbstractFactory
{
AbstractProductA CreateProductA();
AbstractProductB CreateProductB();
}
public class ConcreteFactoryA : AbstractFactory
{
public AbstractProductA CreateProductA()
{
return new ProductA1();
}
public AbstractProductB CreateProductB()
{
return new ProductB1();
}
}
public class ConcreteFactoryB : AbstractFactory
{
public AbstractProductA CreateProductA()
{
return new ProductA2();
}
public AbstractProductB CreateProductB()
{
return new ProductB2();
}
}
public class Client
{
private AbstractProductA _productA;
private AbstractProductB _productB;
public Client(AbstractFactory factory)
{
_productA = factory.CreateProductA();
_productB = factory.CreateProductB();
}
}
}
现在,如何理解它。我可以理解它是如何工作的,但它看起来很幼稚。有一件事是,教程网站上的每个人都选择的示例可能不是正确的示例。
另外,它真正给我带来了什么好处。我可以使用接口以通常的非抽象工厂方式来完成它,整个事情仍然可以正常工作(设计方面)。
详细的例子说明是我要找的
【问题讨论】:
-
.NET 数据提供者是 AbstractFactory 的例子。 docs.microsoft.com/en-us/dotnet/framework/data/adonet/…
-
恕我直言,抽象工厂被高估了。与使用 gerenics 相比,它几乎没有什么好处。
标签: c# design-patterns factory-pattern abstract-factory