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

    一、设计模式

    1、工厂模式

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

    2、单例模式

    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();
            }
    View Code

    二、委托

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

    1、定义委托

    关键字:delegate

    函数签名签名和函数保持一致 (函数签名指返回类型和参数列表:例上面程序2中的void和string s)

    定义委托的时候要根据函数来定义

    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("张三");
                //if (n == 0)
                //{
                //    America();
                //}
                //else if (n == 1)
                //{
                //    China();
                //}
                //else if (n == 2)
                //{
                //    HanYu();
                //}
                //America();
                //China();
            }
    
            //语音包
            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");
            }  
        }
    View Code

    ※事件

    事件就是一种特殊的委托

  • 相关阅读:
    protobuf 协议 windows 下 C++ 环境搭建
    protobuf 协议 windows 下 java 环境搭建
    ProtocolBuffers (二) android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】
    C++ ofstream和ifstream详细用法
    C# 关于out和ref的问题
    java 解析office文件 大全
    Ezhuang
    IOS
    Android Client and PHP Server
    一个IM开源项目LiteTalk
  • 原文地址:https://www.cnblogs.com/shadow-wolf/p/6108709.html
Copyright © 2011-2022 走看看