zoukankan      html  css  js  c++  java
  • 面向对象 设计模式和委托

    工厂模式

        public class JiSuan
        {
            private int a;
    
            public int A
            {
                get { return a; }
                set { a = value; }
            }
            private int b;
    
            public int B
            {
                get { return b; }
                set { b = value; }
            }
    
    
            public virtual int YunSuan()
            {
                return 0;
            }
    
        }
    
        //加法类
        public class Jia:JiSuan
        {
            public override int YunSuan()
            {
                return base.A + base.B;
            }
        }
    
        //减法类
        public class Jian : JiSuan
        {
            public override int YunSuan()
            {
                return base.A - base.B;
            }
        }
    
    
        //工厂类
        public class GongChang
        {
            public static JiSuan DuiXiang(string s)
            {
                switch(s)
                {
                    case "+":
                        return new Jia();
                        break;
                    case "-":
                        return new Jian();
                        break;
                    case "*":
                        return new Cheng();
                        break;
                    default:
                        return new Jia();
                        break;
                       
                }
            }
        }

    单例模式

        class DBDA
        {
            //建变量
            public string host;
            public string database;
    
            //静态成员,用来存储该类的对象
            public static DBDA db = null;
    
            //构造方法    让该类不能被实例化
            private DBDA()
            { 
            }
    
            //提供一个造对象的方法,控制只能造一个对象
            public static DBDA DuiXiang() //因为不能造对象所以用static
            {
                if (db == null)
                {
                    db = new DBDA();
                }
                return db;
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                DBDA db = DBDA.DuiXiang();
                db.host = "localhost";
    
                DBDA db1 = DBDA.DuiXiang();
                
                Console.WriteLine(db1.host);            
                Console.ReadLine();
            }    

    委托
    也称为代理,事件也是一种委托
    定义在类的最外面

    1、定义委托
    关键字:delegate
    函数签名签名和函数保持一致
    定义委托的时候要根据函数来定义
    public delegate int First(int a,int b);
    指向的方法的返回类型,需要参数必须一致!

    2、定义委托变量,指向方法

    委托不能被实例化,因为不是类

    First f = new JiaFa().JiaFa; //新建委托变量,指向方法,注意!!方法不需要小括号!!

    第二次可以使用+=

    public int JiaFa(int a,int b)
    {
    return a+b;
    }

    调用:
    f(5,3);

    可以理解为函数的指针,委托指向哪个函数,则这个委托就代表哪个函数
    可以让函数当做参数一样进行传递

        //定义委托
        public delegate void SuiBian(string s);
    
        class Program
        {
            static void Main(string[] args)
            {
                //委托
                //把方法参数化
                SuiBian s = China;
    
                s += America; //+=是绑定方法  -=去掉一个方法
    
    
                //调用语音方法
                Speak(s);
    
              
                Console.WriteLine();
                Console.ReadLine();
    
            }
    
            //语音功能的方法
            static void Speak(SuiBian yu)
            {
                yu("张三");
            }
    
            //语音包
            public static void America(string s)
            {
                Console.WriteLine(s+"hello");
            }
            static void China(string s)
            {
                Console.WriteLine(s+"你好");
            }
            static void HanYu(string s)
            {
                Console.WriteLine(s+"bjdkaj");
            }  
        }

    ※事件

    事件就是一种特殊的委托

  • 相关阅读:
    利用Jquery实现http长连接(LongPoll)
    使用C#把发表的时间改为几年前,几个月,几天前,几小时前,几分钟前,或几秒前
    跨域调用接口——WebClient通过get和post请求api
    Url重写——伪静态实现
    控制反转(IOC)
    文件上传之——用SWF插件实现文件异步上传和头像截取
    利用枚举展示下拉列表
    时间格式转换—将后台返回的/Date(1448954018000)/格式转换为正常的时间格式
    @RenderSection,@RenderPage,@RenderBody介绍
    简单工厂模式(转)
  • 原文地址:https://www.cnblogs.com/ShenG1/p/5771489.html
Copyright © 2011-2022 走看看