工厂只返回接口的实现吗?

mrb*_*lah 4 factory-pattern

工厂只返回接口的实现吗?那是工作吗?

Jef*_*nal 14

有时这是工厂所做的一切,但他们也可以:

  • 根据仅在运行时可用的数据选择具体实现:

    // Beverage Factory
    public IBeverage CreateBeverage(DateTime orderDate) {
        return orderDate.Hour > 12 ? new Beer() : new Milk();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 执行构造后初始化(通常是昂贵的初始化或初始化不适合封装在对象内部的数据):

    // Weather report factory
    public IWeatherReport CreateWeatherReport() {
        WeatherReport report = new WeatherReport();
        report.data = WeatherWebService.GetData();
        return report;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 基于现有实例初始化新实例:

    // Fittest Algorithm Factory
    public Algorithm CreateNewAlgorithm() {
        return this.fittestAlgorithm.Clone();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 从池中绘制实例而不是从头创建一个实例:

    public IDbConnection CreateConnection(string connectionString) {
        return this.ConnectionStacks[connectionString].Pop();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 返回一个单例实例(虽然很糟糕,你最好确保它是线程安全的!)