在开发asp.net程序时,用户的数据将保存至数据库,程序与数据库之间的数据操作,会涉及到往数据库添加数据,编辑数据,更新数据和删除数据等。
本次Insus.NET介绍的是工厂方法,因此我们会从这几个操作入手。介绍工厂方法设计模式,得先从简单工厂设计模式(Simple Factory)开始,
简单工厂,有一个操作类,这个类有一个virtual方法,好让其它子类继承与重写:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for Operation/// namespace Insus.NET{ public class Operation { public virtual void Processing() { } }}
数据添加类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for OperationAdd/// namespace Insus.NET{ public class OperationAdd : Operation { public override void Processing() { HttpContext.Current.Response.Write("数据添加操作。"); } }}
数据编辑类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for OperationEdit/// namespace Insus.NET{ public class OperationEdit : Operation { public override void Processing() { HttpContext.Current.Response.Write("数据编辑操作。"); } }}
数据更新类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for OperationUpdate/// namespace Insus.NET{ public class OperationUpdate : Operation { public override void Processing() { HttpContext.Current.Response.Write("数据更新操作。"); } }}
数据删除类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for OperationDelete/// namespace Insus.NET{ public class OperationDelete : Operation { public override void Processing() { HttpContext.Current.Response.Write("数据删除操作。"); } }}
操作工厂类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for OperationFactory/// namespace Insus.NET{ public class OperationFactory { public static Operation CreateOperate(string operate) { Operation objOperation = null; switch (operate) { case "Add": objOperation = new OperationAdd(); break; case "Edit": objOperation = new OperationEdit(); break; case "Update": objOperation = new OperationUpdate(); break; case "Delete": objOperation = new OperationDelete(); break; } return objOperation; } }}
OK,简单工厂完成,我们可以由简单工厂设计模式(Simple Factory)演变为工厂方法设计模式(Factory Method)。
工厂方法设计模式,是定义一个用于创建对象的接口,让子类决定实例化哪一个类。
首先创建一个工厂接口:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for IOperationFactory/// namespace Insus.NET{ public interface IOperationFactory { Operation CreateOperation(); }}
下面分别是为添加,编辑,更新和删除各创建一个具体的工厂,并实现上面刚刚建好的工厂接口:
添加工厂类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for AddFactory/// namespace Insus.NET{ public class AddFactory : IOperationFactory { public Operation CreateOperation() { return new OperationAdd(); } }}
编辑工厂类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for EditFactory/// namespace Insus.NET{ public class EditFactory : IOperationFactory { public Operation CreateOperation() { return new OperationEdit(); } }}
更新工厂类:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for UpdateFactory/// namespace Insus.NET{ public class UpdateFactory : IOperationFactory { public Operation CreateOperation() { return new OperationUpdate(); } }}
删除工厂方法:

using System;using System.Collections.Generic;using System.Linq;using System.Web;////// Summary description for DeleteFactory/// namespace Insus.NET{ public class DeleteFactory : IOperationFactory { public Operation CreateOperation() { return new OperationDelete(); } }}
这样一来,工厂方法设计模式,就是去掉简单工厂设计模式的操作工厂类,在客户端应用此设计模式,直接实例需要的哪个操作工厂,如添加工厂类还是删除工厂类等:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Insus.NET;public partial class FactoryMethodDemo : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { IOperationFactory factory = new UpdateFactory(); //实例更新工厂类。 Operation operation = factory.CreateOperation(); operation.Processing(); }}
工厂方法设计模式源代码(.net 4.0):
http://download.cnblogs.com/insus/CSharpNET/Insus_FactoryMethod.rar
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1009/viewspace-2812637/ ,如需转载,请注明出处,否则将追究法律责任。