一番话:设计模式之工厂方法。

发布时间: 2007-05-21 09:46    作者: 未知    来源: 未知    浏览:    评论

考虑一个问题。我们现在需要一个类的实例来协助我们完成某项功能。这在面向对象的开发过程中是常见的。在使用这个类的实例的时候,我们还需要对他进行一些初始化的工作。另外,为了保证我们的代码具有一定的扩展性,我们不想关心这个类的具体细节,并且希望在将来问题发生变化的时候,我们可以不改变我们的代码就可以改变这个类的行为。
现在问题在于,初始化工作同这个类的具体细节密切相关。类的行为不同,初始化的工作也不同。但是这个类本身只是提供一些辅助性的工作,在它的内部,也同样不关心外部调用环境,也就是我们的代码中的细节。这样就产生了矛盾:不知道这个类的细节,我们不能做初始化工作,这个类本身不能做初始化工作。我们为了扩展性不想知道类的细节。
为了解决这个矛盾,就可以使用设计模式中的工厂方法。
这个方法在设计模式这本书中是这样定义的:定义一个用于创建对象的接口,让子类决定将那个类实例化。
这样,对于上述矛盾,我们可以做这样的设计:
我们需要的协助类叫做Product
定义一个类Factory。他有一个方法叫做CreateProduct(),这个方法返回一个Product类的实例。这个方法是Overridable 的,以便子类覆盖。
假设我们的客户端代码是ClientFun()方法,他有一个参数,类型为Factory:ClientFun(f as Factory)
我们可以把初始化工作放在CreateProduct方法中。
ClientFun()代码中,在需要Product类实例的时候,调用f.CreateProduct()方法,获得Product类的实例。
在需要新的Pruduct实例的时候,我们可以创建一个Factory的子类,在这个子类中覆盖CreateProduct方法,返回一个新的Product实例,并进行新的初始化工作。

TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多