做一个工厂只是返回一个接口的实现? 这是工作吗?做一个工厂只是返回一个接口的实现?
回答
请参阅wikipedia。取决于“返回接口的实现”的意思,是的。但是这个定义可能不是很准确/全面(特别是因为Factory模式不一定需要接口的概念)。
出自百科:
工厂模式的本质是“定义的界面,用于创建一个对象,但让子类决定哪一个类实例工厂方法使一个类的实例化延迟到子类。
从本质上说,是
然而,根据您的语言,“接口”可以具有特定意义的工厂通常会返回一个具体实施总承包的 - 。这可以是接口,基类或任何其他专业化手段。另外,有些时候工厂会返回您指定的确切类型 - 但是您为另一个目的而使用工厂,例如管理生命期,跟踪或除了构造特定类型之外的其他一些基本原理。
+!为了清晰和简洁 – 2009-12-17 21:35:36
夫妇这更重要的资源:
更具体的答案是,一个工厂是提供预初始化和施工前适用于常见类型的对象。这个最简单的例子(我见过)是一个“锤子工厂”,其中锤子由两个物体(手柄和头)构成,并被命名为“木柄羊角锤”。因此,我们的工厂,可以具有单个方法:
(Hammer|IHammer|...) GetHammer(string hammername);
哪可以返回多个对象中的一个(实际锤对象,描述锤,用于锤基类等的接口)。可能最有用的是返回描述锤子的界面,并允许我们从那里实现许多有用的设计模式。
有时候就是这样一个工厂做,但他们还可以:
选择基于数据的具体实现,它在运行时是唯一可供选择:
// Beverage Factory public IBeverage CreateBeverage(DateTime orderDate) { return orderDate.Hour > 12 ? new Beer() : new Milk(); }
执行施工后初始化(通常是昂贵的初始化或初始化不适合封装在对象本身中的数据):
// Weather report factory public IWeatherReport CreateWeatherReport() { WeatherReport report = new WeatherReport(); report.data = WeatherWebService.GetData(); return report; }
初始化基于现有实例的新实例:
// Fittest Algorithm Factory public Algorithm CreateNewAlgorithm() { return this.fittestAlgorithm.Clone(); }
从池中绘制的,而不是从头创建一个实例:
public IDbConnection CreateConnection(string connectionString) { return this.ConnectionStacks[connectionString].Pop(); }
返回单一实例(虽然难吃,你最好确定它是线程安全的!)
或者* pre * - 构造初始化 - 类似于由几个类共享的静态类inits,或者仅仅不适合被实例化的类。 – Roboprog 2010-03-13 16:43:47
- 1. 工厂方法返回一个给定的接口的实现
- 2. 团结 - 一个工厂方法多接口注册返回相同的实现
- 3. 创建一个返回空结构实现的工厂类
- 4. 让两家工厂返回实现两个接口相同的对象
- 5. 我需要一个只有一个实现的接口吗?
- 6. C++接口返回一个引用 - 这是一个不好的做法吗?
- 7. 实现一个java接口
- 8. 必须实现接口A或接口B(只有一个)
- 9. 做一个连接,使第一行只返回
- 10. 如何在另一个接口中实现一个接口
- 11. Kotlin是否允许一个返回此接口实现类型值的函数?
- 12. 哪个接口一个类实现?
- 13. dotnet应该只是一个类库只暴露一个接口或一个实现
- 14. 测试一个对象是否实现了一个接口
- 15. 类设计:类实现接口实现另一个接口
- 16. 去工厂方法返回类型接口,而不是实现接口的结构
- 17. 返回一个接口的Java
- 18. 的shared_ptr返回一个接口
- 19. 实现一个扩展Parcelable的接口
- 20. NoSuchBeanDefinitionException实现一个新的接口
- 21. 返回同一个实例多个接口
- 22. 自连接只返回一个记录
- 23. 做一个C++ 11 Dijkstra算法实现返回最短路径
- 24. 多个会话工厂,一个连接?
- 25. 方法返回一个接口
- 26. Auto属性,返回一个接口
- 27. 是一个被认为是实现的超类的接口吗?
- 28. 有条件地实现一个接口
- 29. 实现一个通用接口
- 30. 实现一个通用接口
如果我们在谈论f我会不同意这个定义。工厂本身可以实现一个接口(IFactory),但它不是一个接口,也没有定义接口。工厂实现也会实例化类本身,而不是推迟到一个子类。 – 2009-12-17 20:12:57
我认为这个术语是“接口”的一般定义,而不是语言结构“接口”的实际概念 – rossipedia 2009-12-17 20:18:23