0

我有不同种类的报价单,比如船报价单、摩托车报价单、汽车报价单,它们都派生自报价单类。当客户想要获得报价时,我只需要返回报价。我可以通过两种方式实现:

工厂:

public class QuoteFactory{
     public Quote GetQuote(string QuoteType )
     {
      if(quoteType = "car")
         {
           return new CarQuote()
        }
     }

DI 与 Spring.Core

将所有引用类型添加到 Context 中,然后让客户决定需要哪种类型。提前致谢。

4

2 回答 2

1

不确定您的问题,但这是使用 DI 重构的工厂:

public class QuoteFactory : IQuoteFactory{
    public QuoteFactory(Quote boatQ, Quote motorQ, Quote carQ){
        // parameter assignment
    }
    Quote boatQ;
    Quote motorQ;
    Quote carQ;

    public Quote Create(string quote){
        if(quote == "car") return carQ;
        //further condition
    }
}

使用这种设计,您可以依赖 DI Container 来处理构造函数注入。此外,您可以通过注入来替换此设计IDictionary<string, Quote>

于 2013-08-13T17:17:45.753 回答
0

如果您只需要报价,那么该方法的意义何在。调用方法知道它想要什么类型的报价——它必须作为参数传入。如果您真的想将报价的创建抽象为可注入类(例如用于单元测试),为什么不创建一个通用方法,例如:

public class QuoteFactory : IQuoteFactory
{
    public TQuote CreateQuote<TQuote>()
        where TQuote : new() // or Quote if specific attributes requied to be set by factory
    {
        return new TQuote();
    }
}
于 2013-08-13T16:09:32.237 回答