設計模式应用之工厂方法模式

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體:   |    |    |  超大  

對於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();

}

把上面兩個看一看比較一下是不是這麼一回事啊!(注:下面这个例子引用博客园某位博友的代码)

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航