面向對象(六)——設計模式和委託

1、設計模式設計模式

一、工廠模式ide

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

二、單例模式函數

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

 

2、委託ui

也稱爲代理,事件也是一種委託,定義在類的最外面。spa

一、定義委託 設計

關鍵字:delegate 代理

函數簽名簽名和函數保持一致 (函數簽名指返回類型和參數列表:例上面程序2中的void和string s)指針

定義委託的時候要根據函數來定義 code

public delegate int First(int a,int b);對象

指向的方法的返回類型,須要參數必須一致!

二、定義委託變量,指向方法

委託不能被實例化,由於不是類

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

※事件

事件就是一種特殊的委託

相關文章
相關標籤/搜索