zoukankan      html  css  js  c++  java
  • 一个HttpHandler的小设计

    例子

     class Program
        {
            static void Main()
            {
                Son s = new Son();
                s.show();
                Console.Read();
            }
        }
        abstract class Father
        {
            public void show()
            {
                doMethod();
            }
            protected abstract void doMethod();
        }
        class Son:Father
        {
            protected override void doMethod()
            {
    
                Console.WriteLine("Son Do Something");
            }
        }

    扩展

    namespace Test
    {
        class Program
        {
            static void Main()
            {
                IHttpHandler person = HttpHandlerFactory.CreateIHttpHandler("Handler");
                person.ProcessRequest();
                Console.Read();
            }
        }
        public interface IHttpHandler
        {
            void ProcessRequest();
        }
        public class HttpHandlerFactory
        {
            public static IHttpHandler CreateIHttpHandler(string type)
            {
                Assembly ass = Assembly.Load("Test");
                Type t = ass.GetType("Test." + type);
                object instance = Activator.CreateInstance(t, true);
                return instance as IHttpHandler;
            }
        }
        public abstract class HandlerBase : IHttpHandler
        {
            public void ProcessRequest()
            {
                doMethod();
            }
            protected abstract void doMethod();
        }
        class Handler : HandlerBase
        {
            protected override void doMethod()
            {
                Console.WriteLine("Son Do Something");
            }
        }
    }

    再扩展

    namespace Test
    {
        public class Context
        {
            public static string Controller = "Handler";
            public static string Action = "";
        }
        class Program
        {
            static void Main()
            {
                HttpHandlerFactory f = new HttpHandlerFactory();
                Console.Read();
            }
        }
        public interface IHttpHandler
        {
            void ProcessRequest();
        }
        public class HttpHandlerFactory
        {
            public HttpHandlerFactory()
            {
                IHttpHandler page = HttpHandlerFactory.CreateIHttpHandler(Context.Controller);
                page.ProcessRequest();
            }
            public static IHttpHandler CreateIHttpHandler(string type)
            {
                Assembly ass = Assembly.Load("Test");
                Type t = ass.GetType("Test." + type);
                object instance = Activator.CreateInstance(t, true);
                return instance as IHttpHandler;
            }
        }
        public abstract class HandlerBase : IHttpHandler
        {
            public void ProcessRequest()
            {
                doMethod();
            }
            protected abstract void doMethod();
        }
        class Handler : HandlerBase
        {
            protected override void doMethod()
            {
                Console.WriteLine("Son Do Something");
            }
        }
    }

    上面就是模拟一般处理程序的流程,一般没有HandlerBase,

     不晓得MVC是不是这样设计的

    namespace Test
    {
        public class Context
        {
            public static string NameSpace = "Test";
            public static string Controller = "Handler";
            public static string Action = "Show";
            public static object[] parameters = new object[] { "hongda", 5 };
        }
        class Program
        {
            static void Main()
            {
                Assembly ass = Assembly.Load(Context.NameSpace);
                Type t = ass.GetType(Context.NameSpace + "." + Context.Controller);
                object obj = ass.CreateInstance(Context.NameSpace + "." + Context.Controller);
                MethodInfo method = t.GetMethod(Context.Action);
                object result = method.Invoke(obj, Context.parameters);
                Console.WriteLine(result.ToString());
                Console.Read();
            }
        }
        public class Handler
        {
            public string Show(string a, int b)
            {
                return a + b;
            }
        } 
    }

     肯定不是,

  • 相关阅读:
    QFramework 使用指南 2020(二):下载与版本介绍
    QFramework 使用指南 2020 (一): 概述
    Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践
    Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介
    Unity 游戏框架搭建 2017 (二十三) 重构小工具 Platform
    Unity 游戏框架搭建 2017 (二十二) 简易引用计数器
    Unity 游戏框架搭建 2017 (二十一) 使用对象池时的一些细节
    你确定你会写 Dockerfile 吗?
    小白学 Python 爬虫(8):网页基础
    老司机大型车祸现场
  • 原文地址:https://www.cnblogs.com/hongdada/p/3044974.html
Copyright © 2011-2022 走看看