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