在C#中创建一个简单的工厂类

Jos*_*ech 4 c#

我正在创建一个工厂类来简化创建另一个类的对象而不会污染目标类的构造函数(我认为这是工厂的用途)

这就是我现在所拥有的.

public class QFactory
{
    public Quiz.Question q(string text, string buttonname)
    {
        Quiz.Question question = new Quiz.Question();
        question.QuestionText = text;
        question.QuestionImage = buttonname;

        return question;
    }

    public Quiz.Answer a(string answerText, bool answerRight = false)
    {
        Quiz.Answer answer = new Quiz.Answer();
        answer.text = answerText;
        answer.correct = answerRight;
        return answer;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使用它来创建Quiz.Question和Quiz.Answer对象,我必须以下列方式使用它.

Quiz.Question q = (new QFactory()).q("What is a tomato?","But_01_Idle");

Quiz.Answer a = (new QFactory()).a("fruit",true);
Quiz.Answer b = (new QFactory()).a("vegetable");
Quiz.Answer c = (new QFactory()).a("animal");

q.Answers = new List<Quiz.Answer>{a,b,c}; // add a,b,c answer to the question
Run Code Online (Sandbox Code Playgroud)

我如何更改QFactory类,以便它的用法是这样的(单身?)?

Quiz.Question q = QFactory.q("what is a Tomato?","But_01_Idle");
...
Run Code Online (Sandbox Code Playgroud)

And*_*ren 11

在工厂中使方法静态

  • 工厂的正常使用是创建一个调用者不知道的类型的对象.即,声明的返回类型是一个接口(IQuestion),工厂可以创建一些具体类型的问题的实例.这个想法是,工厂生产的问题类型将来可以改变,而其他代码没有注意到.因此,工厂作为一个解耦. (4认同)
  • 在这种情况下似乎没问题,但我不会急于让一切都变得静止.如果另一个问题/答案对象系列需要由不同的具体工厂构建,那么非静态抽象工厂模式方式会更好. (3认同)