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;
            }
        } 
    }

     肯定不是,

  • 相关阅读:
    用Vue来实现音乐播放器(10):Scroll组件的抽象和应用
    Vue的生命周期
    用Vue来实现音乐播放器(九):歌单数据接口分析
    Java中StringBuilder和StringBuffer的区别
    StringBuilder类型与String类型相互转换
    List中Add()与AddAll()的区别
    Map集合遍历的四种方式
    Object类型转换为Integer
    web开发中常用到的状态码
    mysql--从不订购的客户
  • 原文地址:https://www.cnblogs.com/hongdada/p/3044974.html
Copyright © 2011-2022 走看看