c#设计模式学习1之工厂模式
c#設計模式學習1之簡單工廠
???????? 進入程序員這個行業快一年了,寫的程序就那么多,一直感覺寫的程序沒有質的飛躍,看看高手人家的程序,感覺和自己寫的差的很大,什么n層了等,看起來都費力,仔細琢磨可能是設計模式很欠缺,理解了設計模式才能是整個項目的代碼編寫更看起來好一點(0)。所以最近學習一下設計模式,隨便記錄一下,以后也好回頭看看。主要看的資料是c#設計模式,并不是我自己發明的啊()
??????? 前提:學習設計模式,我認為必須要把c#的基本概念和方法掌握熟練,比如,對象,類,接口,抽象類和方法,重寫,覆蓋,繼承
?????? 按照Gang of Four設計模式分為:創建型,結構型和行為型。
?????? 所以創建型模式都涉及到創建對象實例的方式。new運算符是c#最簡單的方式。但是程序本身不應該依賴對象如何創建,在不同的情況和需求下,對象創建本身也會有很多方式。
????? 工廠方法模式:根據我的理解,工廠方法模式就是創建一個“決策類”,這個決策類根據傳入的數據,然后實例化抽象基類的多個子類的一個某個對象。先看看簡單工廠模式,這個比較容易入門。
???? 舉個實例來說,window項目,建立一個文本框和按鈕。這個文本框要求輸入用戶的姓名,firstname和lastname。中間用空格或逗號分開。點擊按鈕后得到輸入的姓,名字。如果沒有空格或逗號的話那都是名字,沒有姓氏。一般我寫個判斷方法是否有空格或逗號也能實現這個功能。但是這簡單工廠模式會讓我們很容易理解工廠如何去實例化不同的子類對象。
?? 建立一個基類 ? public?? class Namer
??? {
????? protected string lname, fname;
????? public string getLname()
????? {
????????? return lname;
????? }
????? public string getFname()
????? {
????????? return fname;
????? }
??? }
然后有兩個子類分別繼續這個Namer。
檢查空格
?class FirstFirst:Namer
??? {
??????? public FirstFirst(string name)
??????? {
??????????? int n = name.Trim().IndexOf(" ");
??????????? if (n > 0)
??????????? {
??????????????? fname = name.Trim().Substring(0, n);
??????????????? lname = name.Trim().Substring(n + 1);
??????????? }
??????????? else
??????????? {
??????????????? lname = name;
??????????????? fname = "";
??????????? }
??????? }
??? }
??????檢查逗號
class LastFirst:Namer
??? {
??????? public LastFirst(string name)
??????? {
??????????? int i = name.Trim().IndexOf(",");
??????????? if (i > 0)
??????????? {
??????????????? fname = name.Trim().Substring(0, i);
??????????????? lname = name.Trim().Substring(i + 1);
??????????? }
??????????? else
??????????? {
??????????????? lname = name.Trim();
??????????????? fname = "";
??????????? }
??????? }
??? }
然后我們就要創建工廠了。代碼也很好理解,就是根據輸入的文本框,創建不同的對象
?? class NameFactory
??? {
??????? public NameFactory()
??????? { }
??????? public Namer getName(string name)
??????? {
??????????? int n=name.Trim().IndexOf(",");
??????????? if (n > 0)
??????????? {
??????????????? return new LastFirst(name);
??????????? }
??????????? else
??????????? {
??????????????? return new FirstFirst(name);
??????????? }
??????? }
??? }
然后在按鈕事件中:
?private void button1_Click(object sender, EventArgs e)
??????? {
??????????? NameFactory nameFac=new NameFactory();
??????????? Namer nm = nameFac.getName(this.textBox1.Text);
??????????? MessageBox.Show("FirstName : " + nm.getFname() + " LastName : " + nm.getLname());
??????? }
這樣我們在調用工廠的getName()時候就不需要知道創建的是哪個類。也不用知道是哪個類的getFname()和getLname()了
? 這是我看c#設計模式的一點理解,然后準備工廠模式之工廠方法模式
?
本文使用Blog_Backup未注冊版本導出,請到soft.pt42.com注冊。
轉載于:https://www.cnblogs.com/zjypp/archive/2007/04/14/2319506.html
總結
以上是生活随笔為你收集整理的c#设计模式学习1之工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PDA开发初级经验
- 下一篇: 商业贷款基准利率2022,两类贷款利率一