麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

設計模式應用之工廠方法模式

2019-11-14 14:20:49
字體:
來源:轉載
供稿:網友

對於http請求原理的朋友應該了解IIS上後綴映射

/*當我們請求一個*.aspx的文件時,此時會映射到System.Web.UI.PageHandlerFactory類上進行處理,而對*.ashx的請求將映射到System.Web.UI.SimpleHandlerFactory類中
(這兩個類都是繼承于IHttpHandlerFactory接口的)*/

下面用一線圖來直觀的看一下

圖引用:http://www.companysz.com/zhili/p/FactoryMethod.html

為了更直觀的代碼DEOM我把.net部分源碼弄出來了

/*當我們請求一個*.aspx的文件時,此時會映射到System.Web.UI.PageHandlerFactory類上進行處理,而對*.ashx的請求將映射到System.Web.UI.SimpleHandlerFactory類中(這兩個類都是繼承于IHttpHandlerFactory接口的)*///抽象工廠public interface IHttpHandlerFactory{    //返回接口---->抽象產品角色    IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated);    void ReleaseHandler(IHttpHandler handler);}//具體工廠internal class SimpleHandlerFactory : IHttpHandlerFactory2, IHttpHandlerFactory{    public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string virtualPath, string path)    {        return ((IHttpHandlerFactory2)this).GetHandler(context, requestType, VirtualPath.CreateNonRelative(virtualPath), path);    }    //其他方法省略掉了.....}//具體工廠public class PageHandlerFactory : IHttpHandlerFactory2, IHttpHandlerFactory{    public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string virtualPath, string path)    {        return this.GetHandlerHelper(context, requestType, VirtualPath.CreateNonRelative(virtualPath), path);    }    //其他方法省略掉了.....}//抽象產品角色public interface IHttpHandler{    bool IsReusable{get;}    void PRocessRequest(HttpContext context);}//頁面aspx(具體頁面產品)public partial class SystemManager_WebsitePublishing_publishServerFileManageList : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {              }}public class Page : IHttpHandler{    }/*-------------------------------------------------------*///一般處理程序ashx(具體一般處理程序產品)public class getPublishServerQueueInfo : IHttpHandler{    public void ProcessRequest (HttpContext context) {        }    public bool IsReusable {        get {            return false;        }    }}

//沒有在場景用的小例子:

//抽象產品public interface ILight{    void TurnOn();    void TurnOff();}//具體的產品類:燈泡public class BulbLight:ILight{    public void TurnOn()    {        Console.WriteLine("BulbLight turns on.");    }    public void TurnOff()    {        Console.WriteLine("BulbLight turns off.");    }}// 具體的產品類:燈管public class TubeLight:ILight{    public void TurnOn()    {        Console.WriteLine("TubeLight turns on.");    }    public void TurnOff()    {        Console.WriteLine("TubeLight turns off.");    }    }//抽象的工廠類public interface ICreator{    ILight CreateLight();}//具體燈泡工廠public class BulbCreator:ICreator{    public ILight CreateLight()    {        return new BulbLight();    }}//具體燈管工廠public class TubeCreator:ICreator{    public ILight CreateLight()    {        return new TubeLight();    }}static void Main(string[] args){    //先給我來個燈泡    ICreator creator = new BulbCreator();    ILight light = creator.CreateLight();    light.TurnOn();    light.TurnOff();    //再來個燈管看看    creator = new TubeCreator();    light = creator.CreateLight();    light.TurnOn();    light.TurnOff();}

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

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄色网址进入 | 综合网日日天干夜夜久久 | 日韩毛片免费观看 | 精品一区二区免费视频视频 | 亚洲国产精品久久久 | 国产自在线 | 91久久91久久精品免观看 | 久久激情小视频 | 国产成人在线一区二区 | 国产妇女乱码一区二区三区 | 亚洲精品a级 | 九色在线78m | 久草最新| 国产精品久久久久久久久久10秀 | 免费毛片视频播放 | 毛片大全在线观看 | 精品一区二区三区日本 | 日本免费一区二区三区四区 | 成人国产精品一区 | 午夜av男人的天堂 | 操毛片| 中文字幕视频在线播放 | 亚洲一区二区在线 | 亚洲综合网站 | 欧美淫视频 | 久久丝袜脚交足黄网站免费 | 一级免费黄色免费片 | 国产精品久久久久无码av | 欧美日韩亚洲另类 | 国产午夜精品一区二区三区嫩草 | 久久艹一区 | 视频一区二区三区免费观看 | 毛片视频播放 | 91懂色| 久久艹精品 | 涩涩屋av | 91久久久久久久 | 国产精品久久久久久婷婷天堂 | 欧美国产91| 亚洲小视频在线播放 | 污在线观看网站 |