【发布时间】:2015-03-31 12:57:24
【问题描述】:
我一直在阅读有关工厂/抽象工厂/简单工厂/等的所有信息。我一直无法找到这个问题的答案。我知道工厂创建的类必须实现相同的接口,或者从相同的基类派生。但是如果不同的类最终没有相同的公共接口会发生什么呢? IE。 SubClass1 和 SubClass2 都派生自 BaseClass。现在SubClass1 添加 PropertyA,SubClass2 添加PropertyB。我是否正确假设这些类不能由工厂创建,因为它们没有 相同的接口?或者,如果它们被创建为 BaseClass,它们就不会公开它们的新属性。公共接口也存在同样的问题。如果有人知道解决此问题的作者,我将不胜感激。
非常感谢!
【问题讨论】:
-
它们仍然可以具有相同的界面。如果您通过界面访问它们,则看不到额外的属性
-
同意伊万。这些类可以由工厂创建,但如果不进行强制转换,则不能使用扩展属性(方法)。你可以使用强制转换,但对我来说这看起来很糟糕
-
我也同意 Ewan,Head First Design Patterns 也非常适合解释模式的细微差别,包括工厂:amazon.co.uk/Head-First-Design-Patterns-Freeman/dp/0596007124
-
是的,他们可以有相同的界面,但我的问题是当他们不有相同的界面时该怎么办。它们确实实现了相同的接口,但具有不包含在该接口中的公共方法,因此如果由工厂创建,则无法看到这些方法。
-
我认为失望证实了我的怀疑。如果我使用工厂,我需要显式地转换返回的对象,这有点否定工厂的价值,除了马虎。我读过“Head First Design Patterns”(一本优秀的新手书顺便说一句),但同样,他们使用“最佳案例”场景。这对于它的书(介绍)来说非常棒。但我一直在寻找漏洞在哪里,所以我不会陷入其中。谢谢大家!
标签: c# factory-pattern