面向对象 设计模式和委托

工厂模式

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

※事件

事件就是一种特殊的委托

转载于:https://www.cnblogs.com/ShenG1/p/5771489.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值