c# - 我应该如何选择 AbstractFactory 的实例?

标签 c# architecture abstract-factory

目前我在实例化 AbstractFactory 时遇到问题。有一些类:

abstract class ABase { }
class A1 : ABase { }
class A2 : ABase { }

abstract class BBase { }
class B1 : BBase
{
    private readonly A1 _a;
    public B1(A1 a)
    {
        _a = a;
    }
}
class B2 : BBase
{
    private readonly A2 _a;
    public B2(A2 a)
    {
        _a = a;
    }
}


abstract class FactoryBBase
{
    abstract public BBase Create(ABase b);
}
class FactoryB1 : FactoryBBase
{
    override public BBase Create(ABase b)
    {
        return new B1(b as A1);
    }
}
class FactoryB2 : FactoryBBase
{
    override public BBase Create(ABase b)
    {
        return new B2(b as A2);
    }
}

class Runtime
{
    public void ProcessA(ABase a)
    {
        //How should I choose a proper factory?
    }
}

如何在 ProcessA 中实例化一个正确的抽象工厂方法取决于 a 的类型?问题是我不想有一个大的 if/else block 。

最佳答案

how to instantiate a proper abstract factory in ProcessA method depending on the type of a?

为了避免大的 if/else block ,您可以将所有工厂放入一个映射中,其中键是 a 的类型,值是实现。在 Java 中,我会通过 Spring 来完成此操作,或者创建一个静态代码,该代码可以在加载类时初始化 map 。

do I use AbstractFactory pattern as it is supposed to be uesd?

恕我直言,是的。

关于c# - 我应该如何选择 AbstractFactory 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30344041/

相关文章:

api - 如何在 Node.js 中最好地创建 RESTful API

Facebook 架构

api - API 是否应该将所有工作委托(delegate)给其他服务?

c++ - 为工厂创建抽象工厂有意义吗?

c# - 使用泛型类和接口(interface)实现抽象工厂

c# - 我的滚轮与 c# 完全不统一?

c# - Entity Framework - CF/FA - 在 POCO 中定义过滤的导航属性

c# - JSON 和 XML 的独立 Web 服务?

c# - 对称加密加密很多小块

Java泛型抽象工厂问题