讨论下 工厂方法(Factory Method)模式
今天学习了下 工厂方法(Factory Method)模式
感觉是这么回事情:
就是一个建立一个工厂的接口(或基类)来生成一个 产品的接口(或基类),然后在程序的其他地方就可以通过那个生成的产品接口动态调用具体产品多实现了的接口功能。
但是这个接口无法提供那个动态类产品的自己区别于其他类产品的特有成员。
怎么解决这个问题呢
------解决方案--------------------我觉得你可以参照一下MSDN得OdbcFactory类,看看它干什么的, 在和你的问题综合起来,相信你就有更好的理解了。
------解决方案--------------------如果你想访问动态类产品的自己区别于其他类产品的特有成员,那么就不要用工厂,工厂实现的是共性,想要特性直接用子类定义就可以了,何必用工厂定义。
------解决方案--------------------工厂就是解决NEW 的问题
------解决方案-------------------- 很多设计模式在.NET类库中都有实现
Builder Pattern:StringBuilder
Factory Method:IHttpHandlerFactory
Adapter Pattern:COM Interop、DataAdapter
Decorator Pattern:BufferedStream、CryptoStream
Composite Pattern:Enterprise Library2.0中的ObjectBuilder
Facade Pattern:Duwamish
Flyweight Pattern:.NET中的String类型
Template Method:服务器控件
Command Pattern:MVC
Iterator Pattern:IEnumerator
Oberver Pattern:委托和事件
Strategy Patterm:System.Configuration.Provider、IComparer
Singleton Pattern:Remoting的Singleton
------解决方案--------------------通过多态可以实现. 我印象中是如此的.
------解决方案--------------------如果您需要使用特定的子类中的特定方法,你不应该使用工厂模式,使用工厂模式,就意味着你需要获得对某个特定接口或父类的引用,而并不关心具体引用了哪个子类或实现,也只有这样您才能够使客户端代码享受到多态的益处,如果非要使用特定的子类,您只能直接new出来,然后使用它。或者使用工厂方法new出来后,在确定的环境下做向下转型。
------解决方案--------------------mark
------解决方案--------------------或者使用工厂方法new出来后,在确定的环境下做向下转型。
——————————————————————————————————————
我现在就是这样做的,有什么模式可以从工厂里直接new出具体的子类。
——————————————————————————————————————
我想,你已经new出具体的子类来了。不过,你把这个子类对象是赋给一个父类的引用(或者是称为对象名吧。因为对象名和对象是应该分开来考虑的)。
说到这里,我想其余的部分你应该自己考虑了。