工廠方法定義:定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。看這麼羅嗦,其實就是多型,父類申明,子類構造。
為什麼會有工廠方法?
我們在寫**的時候經常的使用new關鍵字,也就是例項化乙個具體類,綁著的是具體實現,那麼這樣會帶來乙個後果,在今後的變更中,我們不得不去修改那個類,這將
導致**的不穩定,我們還得去測試一切和這個類有關係的**,並且我們違反了乙個很重要的原則:對修改關閉原則。
我們需要將new和客戶端**分離開來
我們要做個人才網
//技能頁
class skillspage
//教育頁
class educationpage
//經驗頁
class experiencepage
//介紹頁
class introductionpage
//結果頁
class resultspage
//結論頁
class conclusionpage
//總結頁
class summarypage
//文獻頁
class bibliographypage
有了這乙個乙個的模組,我們可以接下去做具體的頁面了。
1public
class createresume
2
1920
//展示個人簡歷頁面
21public
void display()
22
27 }
2829
30//
我又要做個報告頁面,包含了介紹,結果,結論,總結,文獻
31public
class createreport
32
4748
//展示報告頁面
49public
void display()
50
57 }
58
不錯不錯,那麼再做個首頁,搜尋頁,註冊頁,登陸頁..........餓,苦逼的碼農我好累,不想寫了,「不想寫滾蛋!」...
如果我們換成下面這樣。
//比對一下,可以發現者其中很多地方**是相通的比如這些頁面有沒什麼共通點,可以把不變動的提煉出來
//頁面基類
abstract
class page}//
通過分離我們可以少寫很多**
//技能頁
class skillspage : page
//教育頁
class educationpage : page
//經驗頁
class experiencepage : page
//介紹頁
class introductionpage : page
//結果頁
class resultspage : page
//結論頁
class conclusionpage : page
//總結頁
class summarypage : page
//文獻頁
class bibliographypage : page
哇塞,少寫了n*500行**啊,偷笑..還有哪可以少寫點呢
//我們再把建立頁面的**提煉出來
//頁面抽象類
abstract
class document
public document()
//建立具體頁面
abstract
private
void createpages();
//展示頁面
public
void display()
}
//共通public
void common()
}
在看看老闆要我們新增的頁面成啥樣了
1//具體頁面類-個人簡歷,包括技能,教育,經驗
2class resume : document
3
14 }
1516
//具體產品類-報告,包括介紹,結果,結論,總結,文獻
17class report : document
18
30 }
看著很舒心,根據不同需要,我們重寫了建立頁面的**,以後就不怕老闆要求多了,我只要繼承下,重寫個建立方法,最多再添點功能麼
看看客戶端呼叫,再想想工廠方法的定義
1static
void main(string args)
2
等等,這裡為啥還是有new?可以這樣理解,resume和report是2個生產頁面的工廠,他們都有createpage的加工程式,以及展示產品的方法,我們說把客戶端**和
new分離開來,是分離的具體實現,那麼上面的**的具體實現在哪呢,在乙個乙個的子模組裡:技能頁,教育頁...等等。
也許我們的個人簡歷頁面的技能頁要修改或者刪除,那麼我們只需修改工廠裡的加工程式,咦,不是說我們要對修改關閉麼,真的都死板的去遵循原則,那**別想寫了,
我們只能盡力的去靠近原則,靈活運用,不是死板遵循。new 具體實現,肯定存在的,只是工廠把他們圈起來了,方便我們取用。
任性過,頹廢過,荒唐過,現在還是好好的向前走吧,別再徘徊路邊
物件之間的互動
class person 定義乙個人類 role person 人的角色屬性都是人 def init self,name,aggressivity,life value self.name name 每乙個角色都有自己的暱稱 self.aggressivity aggressivity 每乙個角色都...
設計模式 工廠模式,解除耦合的利器
工廠模式是使用頻率很高的一種設計模式,在面試中也經常問到,今天我們就來學習它。解答這個問題前,我們先來了解什麼是工廠模式。工廠模式其實也稱建立模式,是用於建立物件的一種方式。本質上就是用工廠方法來代替new例項化物件。舉個例子 我們在編寫 的時候,在乙個a類中通過new的方式例項化了類b,那麼a類和...
協調多個物件之間的互動 中介者模式(一)
第二種是通過qq群聊天,如圖20 1所示。如果我們使用圖20 1 a 所示方式,乙個使用者如果要與別的使用者聊天或傳送檔案,通常需要加其他使用者為好友,使用者與使用者之間存在多對多的聯絡,這將導致系統中使用者之間的關係非常複雜,乙個使用者如果要將相同的資訊或檔案傳送給其他所有使用者,必須乙個乙個的傳...