Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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
C# C中的简单工厂设计——从另一家工厂调用工厂?_C#_Oop_Design Patterns_Factory - Fatal编程技术网

C# C中的简单工厂设计——从另一家工厂调用工厂?

C# C中的简单工厂设计——从另一家工厂调用工厂?,c#,oop,design-patterns,factory,C#,Oop,Design Patterns,Factory,我需要用C#中的一个简单工厂创建一个对象,该对象有一个依赖项对象,该依赖项对象也是使用另一个简单工厂创建的 从另一个简单工厂调用一个简单工厂是一个好的设计原则吗?我想我可能在做一些奇怪的事情 我有以下资料: interface IObjecAtImplement { void task(); } interface IObjecBtImplement { void taskFoo(); void anotherTaskFoo(); } public static cl

我需要用C#中的一个简单工厂创建一个对象,该对象有一个依赖项对象,该依赖项对象也是使用另一个简单工厂创建的

从另一个简单工厂调用一个简单工厂是一个好的设计原则吗?我想我可能在做一些奇怪的事情

我有以下资料:

interface IObjecAtImplement {
    void task();
}

interface IObjecBtImplement {
    void taskFoo();
    void anotherTaskFoo();
}

public static class ObjectAFactory {

    public static IObjecAtImplement Get(string objecttype) {
        IObjectBImplement objectB = ObjectBFactory.Get(objecttype);
        switch (objecttype)
        case "A";
            return ObjectAFirstImplementacion(objectB);
        case "B";
            return ObjectASecondImplementacion(objectB);
    }
}

public static class ObjectBFactory {
    public static IObjecBtImplement Get(string objecttype) {    
        switch (objecttype)    
        case "A";
            return new ObjectBFirstImplementacion();
        case "B";
            return new ObjectBSecondImplementacion();
        }
    }
}

这是个好主意吗?还有别的办法吗?(代码括号编写得不好,这只是一个示例)

看起来您正在尝试将两种模式组合在一个模式中:和。工厂负责创建对象,而注入依赖项通常是IoC容器的一个部门


为了保持类的明确职责,我建议您考虑使用其中一种

为什么工厂使用静态类?也为工厂定义接口,并在需要的地方通过构造函数传递它们。谢谢,我会这么做的。但我的问题是:从另一家工厂给一家工厂打电话是个好主意吗?这是“正常”吗?谢谢,为什么不呢?这里唯一的反模式是对静态类的强依赖性。