標籤:
原廠模式
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; //+=是Binder 方法 -=去掉一個方法 //調用語音方法 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"); } }
※事件
事件就是一種特殊的委託
物件導向 設計模式和委託