无废话C#设计模式之三:Abstract Factory
2009-04-02 08:21:34 来源:WEB开发网实现要点
l 抽象工厂本身不负责创建产品,产品最终还是由具体工厂来创建的。比如,MatrixModel是Matrix创建的,而不是PatrixSceneFactory创建的。在.NET中可以使用反射来创建具体工厂,从而使得代码变动降到最低。
l 在抽象工厂中需要体现出生产一系列产品。这一系列产品是相互关联,相互依赖一起使用的。
l 抽象工厂对应抽象产品,具体工厂对应具体产品,外部依赖抽象类型,这样对于新系列产品的创建,外部唯一依赖的就是具体工厂的创建过程(可以通过反射解决)。
注意事项
l 一般来说需要创建一系列对象的时候才考虑抽象工厂。比如,创建一个场景,需要创建模型和纹理,并且模型和纹理之间是有一定联系的,不太可能把PatrixTexture套用在MatrixModel上。
l 如果系统的变化点不在新系列的扩充上,那么就没有必要使用抽象工厂。比如,如果我们不会增加新地图的话,那么也就没有必要引入抽象工厂。
.NET中的抽象工厂
l 我们说过,抽象工厂针对系列产品的应变。在使用ADO.NET进行数据访问的时候,如果目标数据库是Access,我们会使用OleDbConnection、OleDbCommand以及OleDbDataAdapter等一系列ADO.NET对象。那么如果数据库是SQL Server,我们又会改用SqlConnection、SqlCommand以及SqlDataAdapter等一系列ADO.NET对象。如果只使用一套对象,没有什么大问题,如果我们的数据访问有系列变化的需求,比如可以针对Access和SQL Server,而且希望改换数据库尽量对客户端代码透明,那么就需要引入抽象工厂模式。
l 好在,ADO.NET 2.0中已经有了整套抽象工厂的类型。看下面的代码,你应该能辨别这些类型在抽象工厂中的角色:
更多精彩
赞助商链接