1.設計模式的概念:
設計模式:設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。
2.設計模式的優點:
為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
---------簡單工廠設計模式
所謂簡單工廠設計模式,就肯定有一個工廠類,這個工廠類中有一個方法。
1.對於這個方法的一些注意點:
01.必須是靜態的
02.返回值是父類類型。
03.傳遞參數(通過題目的不同給予不同的參數)
eg:
public static Pizza getdo(string type){}
2.通過switch選擇結構選擇覆蓋父類的子類
創建父類對象,賦值為null
Pizza pizza=null;
switch(傳入的參數)
{
case 1:
pizza=new ChessePizza();
break;
case 2:
pizza=new pgPizza();
break;
}
return pizza;
---------------------01簡單工廠(制作比薩案例)---------------
首先要創建一個父類比薩類:這個類是抽象的也就是說這個類是abstract修飾的。
這個類中有一個抽象的方法,用於制作比薩。
父類底層有量個子類分別是CheesePizza(奶酪比薩類)PgPizza(培根比薩類)
子類必須重寫父類的抽象的方法。
//比薩類 public abstract class Pizza { public abstract string Show(); } //培根比薩 public class PgPizza:Pizza { public override string Show() { return "培根比薩制作完成!"; } } //奶酪比薩 public class CheesePizza:Pizza { public override string Show() { return "奶酪比薩制作完成!"; } } //工廠類 public class PizzaFactory { public static Pizza dopizza(string type) { Pizza ps = null; switch (type) { case "培根比薩": ps = new PgPizza(); break; case"奶酪比薩": ps = new CheesePizza(); break; } return ps; } }
在form窗體中調用
private void btndo_Click(object sender, EventArgs e) { if (rbBacon.Checked==true) {
//調用工廠中的制作方法,返回值用父類類型接收,傳入制作的比薩類型 Pizza ps = PizzaFactory.dopizza(rbBacon.Text); string work = ps.Show(); MessageBox.Show(work); } else { Pizza ps = PizzaFactory.dopizza(rbCheese.Text); string work = ps.Show(); MessageBox.Show(work); } }
---------------------02簡單工廠(制作計算器)---------------
//計算類:父類 public abstract class Calculate { public double num1 { get; set; }//第一個操作數 public double num2 { get; set; }//第二個操作數 //抽象方法計算結果 public abstract double Cal(); } //加法計算 public class Add:Calculate { public override double Cal() { return this.num1 + this.num2; } } //減法計算 public class Reduce:Calculate { public override double Cal() { return this.num1 - this.num2; } } //乘法計算 public class Ride:Calculate { public override double Cal() { return this.num1 * this.num2; } } //除法計算 public class Div:Calculate { public override double Cal() { double result = 0.0; if (this.num2 == 0) { throw new Exception("被除數不能為0"); } else { result=this.num1 / this.num2; } return result; } } //工廠 public class OpearFactory { public static Calculate Calresult(string opear) { Calculate cal = null; switch (opear) { case"+": cal = new Add(); break; case "-": cal = new Reduce(); break; case "*": cal = new Ride(); break; case "/": cal = new Div(); break; } return cal; } }
在From窗體中調用
當點擊窗口計算按鈕的時候,調用工廠類的靜態方法,根據下拉框所選的運算符作為方法的參數,得出的一個父類返回值類型,然後自定義一個父類類型接受一下!
把窗口TextBox的兩個運算參數傳給自定義父類類型的兩個參數,再由傳進去的運算符進入工廠類決定New哪個子類,然後父類調用子類的計算方法得出一個結果!
private void btnok_Click(object sender, EventArgs e) { //獲取第一個操作數 double num1 = Convert.ToInt32(txtnum1.Text); //獲取第二個操作數 double num2 = Convert.ToInt32(txtnum2.Text); //獲取運算符 string opear = cboOpear.Text; //傳入opear返回值類型為父類類型 Calculate cal= OpearFactory.Calresult(opear); cal.num1 = num1; cal.num2 = num2; double result = 0.0; try { //調用子類對應方法 result = cal.Cal(); } catch (Exception ex) { MessageBox.Show(ex.Message); } lblresults.Text = result.ToString(); }
-----------------------單例設計模式---------------
單例模式的概念:
單例模式就是保證在整個應用程序的生命周期中,在任何時刻,被指定的類只有一個實例,
並為客戶程序提供一個獲取該實例的全局訪問點。簡單的說 就是這個類只能被實例化一次,
以後取出來的都是它的實例.
在S1階段結束時做了一個KTV點歌系統,每次點擊一個窗口進行播放,都會new出一個窗口,如何讓他只new一次,這就涉及到了單例設計模式:
01:創建一個窗體類FrmKTVplay。
02:把系統公有初始化組件方法改為私有
private FrmKTVplay()
{
InitializeComponent();
}
03:定義一個靜態的和窗口類同類型的自定義變量
效果為:private static FrmKTVplay play;
04:再定義一個公有的靜態窗口類型的方法
效果為:public static FrmPlay Show()
{
if (play == null)
{
play = new FrmKTVplay();
}
return play;
}