无废话C#设计模式之四:Factory Method
2009-04-02 08:21:31 来源:WEB开发网核心提示: l 不管怎么样,目的还是让调用方尽量和接口依赖(或者说和稳定的东西去依赖,无废话C#设计模式之四:Factory Method(3),让变化在接口下面变),既是要以来具体类型,它只用知道工厂给我的是一个游戏场景即可,注意事项l 工厂方法通常需要为每个具体产品对应一个具体工厂,也希望能只依赖
l 不管怎么样,目的还是让调用方尽量和接口依赖(或者说和稳定的东西去依赖,让变化在接口下面变),既是要以来具体类型,也希望能只依赖一个。试想一下,如果没有抽象工厂和工厂方法,也少了这些抽象类型,那么调用方可能就要依赖具体场景类型和具体的纹理以及模型类型。并且在调用的时候,通过条件来判断并且创建各种具体类型,一旦有新的场景需要实现,调用方代码可能就需要做很大的调整。暂且不说调整的工作量有多少,调整所带来的风险谁能承担呢?
何时采用
l 从代码角度来说, 如果我们需要创建一个易变的对象,或是希望对象由子类决定创建哪个对象的时候可以考虑工厂方法。
l 从应用角度来说, 如果我们觉得具体产品的创建不稳定,或者客户端根本无需知道创建哪个具体产品的时候可以使用工厂方法。后者对于框架和工具包软件来说更常见,比如有一个打印类负责打印图纸,我们需要得到一个打印对象,对于调用方来说并不知道要使用超宽打印对象还是普通打印对象,我们可以通过工厂方法使客户端和抽象打印工厂直接沟通,由它来决定具体创建哪个打印对象。
实现要点
l 通过继承创建具体产品。很多时候,每一种具体产品对应一个具体的工厂来创建。
l 使用具体工厂类来决定怎么样创建具体产品。调用方并不关心工厂创建的是哪个游戏场景,它只用知道工厂给我的是一个游戏场景即可。
注意事项
l 工厂方法通常需要为每个具体产品对应一个具体工厂,如果滥用的话会使得类的数目急剧增多。
系列文章:
无废话C#设计模式之一:开篇
更多精彩
赞助商链接