對於http請求原理的朋友應該了解IIS上後綴映射
/*当我们请求一个*.aspx的文件时,此时会映射到System.Web.UI.PageHandlerFactory类上进行处理,而对*.ashx的请求将映射到System.Web.UI.SimpleHandlerFactory类中
(这两个类都是继承于IHttpHandlerFactory接口的)*/
下面用一線圖來直觀的看一下
[flash=500,400]http://s1.knowsky.com/20160211/2e1co1xxyi014.png[/flash]
圖引用:http://www.cnblogs.com/zhili/p/FactoryMethod.html
為了更直觀的代碼DEOM我把.net部分源碼弄出來了
/*当我们请求一个*.aspx的文件时,此时会映射到System.Web.UI.PageHandlerFactory类上进行处理,而对*.ashx的请求将映射到System.Web.UI.SimpleHandlerFactory类中
(这两个类都是继承于IHttpHandlerFactory接口的)*///抽象工廠publicinterfaceIHttpHandlerFactory
{//返回接口---->抽象產品角色IHttpHandler GetHandler(HttpContext context,stringrequestType,stringurl,stringpathTranslated);voidReleaseHandler(IHttpHandler handler);
}//具體工廠internalclassSimpleHandlerFactory : IHttpHandlerFactory2, IHttpHandlerFactory
{publicvirtualIHttpHandler GetHandler(HttpContext context,stringrequestType,stringvirtualPath,stringpath)
{return((IHttpHandlerFactory2)this).GetHandler(context, requestType, VirtualPath.CreateNonRelative(virtualPath), path);
}//其他方法省略掉了.....}//具體工廠publicclassPageHandlerFactory : IHttpHandlerFactory2, IHttpHandlerFactory
{publicvirtualIHttpHandler GetHandler(HttpContext context,stringrequestType,stringvirtualPath,stringpath)
{returnthis.GetHandlerHelper(context, requestType, VirtualPath.CreateNonRelative(virtualPath), path);
}//其他方法省略掉了.....}//抽象產品角色publicinterfaceIHttpHandler
{boolIsReusable{get;}voidPRocessRequest(HttpContext context);
}//頁面aspx(具體頁面產品)publicpartialclassSystemManager_WebsitePublishing_publishServerFileManageList : System.Web.UI.Page
{protectedvoidPage_Load(objectsender, EventArgs e)
{
}
}publicclassPage : IHttpHandler
{
}/*-------------------------------------------------------*///一般處理程序ashx(具體一般處理程序產品)publicclassgetPublishServerQueueInfo : IHttpHandler
{publicvoidProcessRequest (HttpContext context) {
}publicboolIsReusable {get{returnfalse;
}
}
}
//沒有在場景用的小例子:
//抽象产品publicinterfaceILight
{voidTurnOn();voidTurnOff();
}//具体的产品类:灯泡publicclassBulbLight:ILight
{publicvoidTurnOn()
{
Console.WriteLine("BulbLight turns on.");
}publicvoidTurnOff()
{
Console.WriteLine("BulbLight turns off.");
}
}//具体的产品类:灯管publicclassTubeLight:ILight
{publicvoidTurnOn()
{
Console.WriteLine("TubeLight turns on.");
}publicvoidTurnOff()
{
Console.WriteLine("TubeLight turns off.");
}
}//抽象的工厂类publicinterfaceICreator
{
ILight CreateLight();
}//具体灯泡工厂publicclassBulbCreator:ICreator
{publicILight CreateLight()
{returnnewBulbLight();
}
}//具体灯管工厂publicclassTubeCreator:ICreator
{publicILight CreateLight()
{returnnewTubeLight();
}
}staticvoidMain(string[] args)
{//先给我来个灯泡ICreator creator =newBulbCreator();
ILight light=creator.CreateLight();
light.TurnOn();
light.TurnOff();//再来个灯管看看creator =newTubeCreator();
light=creator.CreateLight();
light.TurnOn();
light.TurnOff();
}
把上面兩個看一看比較一下是不是這麼一回事啊!(注:下面这个例子引用博客园某位博友的代码)