网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
本月文章推荐
.我们是否需要软件工程.
.嵌入式操作系统课程作业之Write .
.探讨开源软件的互操作策略.
.揭开.NET消息循环的神秘面纱.
..NET设计模式研究之装饰模式.
.统一建模语言UML简介.
.基于.NET的多用户客户端设计.
.六西格玛失败经验谈.
.体验.NET 2.0的优雅之异步Web服务.
.UML类图详解(1).
.浅析软件项目管理中的10个误区.
.软件项目规模估计方法介绍.
.新产品开发项目中的需求问题.
.如何编写高质量软件需求说明书.
.SOA:构建更好的企业应用架构.
.SOA框架的不足.
.有效的软件质量管理.
.软件与并发巨变 不得不面对的革命.
.Windows工作流活动技术概览.
.感悟测试驱动开发.

.NET设计模式之工厂方法模式

发表日期:2008-3-23


1.引言

  工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。工厂方法经常用于创建与某个类相关的类的实例,.NET中的数据库连接对象就是产生数据命令对象的工厂,其中的CreateCommand方法就是工厂方法,其结构如图所示。

.NET设计模式之工厂方法模式
  在IDbConnection中定义了产生IdbCommand对象的工厂方法CreateCommand,具体的Command对象由具体的Connection对象创建。它与具体的数据库相关,不同数据库创建不同类型的Command对象。

  IdbConnection定义了CreateCommand的接口:

IdbConnectio CreateCommad( );
  具体的Connection类中定义了对应的实现,例如针对Oracle数据库:

public OracleCommand CreateCommand( );
  2.概述

  2.1意图

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到子类,这个接口所指的是一个抽象方法。该方法说明需要创建一个对象,但并不给出具体的创建方法和创建什么类型的对象。

  C#的代码如下:

Using System;

Namespace CshapeCreator
{
 public abstract slass Cteator
 {
  public abstract ProdUCtion FactoryMathod();
 }

 public class ConcreteCreator:Creator
 {
  public override Production FactoryMathod()
  {
   return new ConcreteProduction();
  }
 }
}
  2.2使用场合

  当一个类不知道它所必须创建对象的类或一个类希望由子类来指定它所创建的对象时,可以使用工厂方法。

  2.3结构

  工厂方法的结构如图所示:

.NET设计模式之工厂方法模式

  需要注重的是,图中表示工厂方法模式的部分只是Factory Method()。在Create中定义这个方法的接口,在ConcreteCreator中实现这个方法。假如没有这个方法,则不是工厂方法模式。还需要说明的是,Creator的职责并非只是创建一个产品,它经常同时还包含模板方法。即模式仅限于方法部分,这也是为什么叫做“工厂方法”的原因。它与抽象工厂和构造器不同,二者都有工厂类。在使用时都需要将工厂类的实例作为参数传递给被使用者,由被使用者做产品的实例化工作,当然这些模式中可能会用到工厂方法模式。

  2.4效果

  工厂方法使类中的代码不依靠于它必须创建的类,代码只要知道它需要创建的类的接口。工厂方法的缺点是新增加一个需要创建的类,就需要增加一个相应的子类。

  3..NET中的工厂方法——获得迭代器

  .NET中的集合和列表等聚合都提供了对自身进行遍历访问的迭代方法,集合实现Ienumerable接口,而迭代器实现Ienumerator接口。因为迭代器不能脱离聚合独立存在,所以其本身没有公开的构造函数,只能通过聚合创建。不同的聚合采用不同的迭代器,在Ienumerable中定义了产生迭代器的接口,即工厂方法。如图所示。

.NET设计模式之工厂方法模式

  实现IEnumerable接口的类,如ArrayList等集合类实现了GetEnumerator函数,即实现了工厂方法的具体实现。根据不同的类,获得不同的Ienumerator。例如,ArrayList中的GetEnumerator返回的IEnumerator是ArrayListEnumeratorSimple,Sting中的GetEnumerator 返回的Ienumerator是 CharEnumerator:

using System;
using System.Collections;

namespace Enumerator
{
 public class Class1
 {
  [STAThread]
  static void Main(sting[] args)
  {
   ArrayList a = new ArrayList();
   Ienuemrator e = a.GetEnumerator();

   System.Console.WriteLine(e.GetType().Name );

   String s = “ ”;
   Ienumerator se=s.GetEnumerator();

   System.Console.WriteLine(se.GetType().Name );

   System.Console.ReadLine ();
  }
 }
}
  在这里,工厂方法起到了连接类层次的作用。

上一篇:建模过程的盲点:软件集成中的软知识 人气:417
下一篇:体验.NET 2.0的优雅之异步Web服务调用 人气:397
浏览全部软件工程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐