工廠模式 為互動物件之間的松耦合而努力

2022-01-12 13:07:46 字數 2897 閱讀 7566

工廠方法定義:定義了乙個建立物件的介面,但由子類決定要例項化的類是哪乙個。工廠方法讓類把例項化推遲到子類。

看這麼羅嗦,其實就是多型,父類申明,子類構造。

為什麼會有工廠方法?

我們在寫**的時候經常的使用new關鍵字,也就是例項化乙個具體類,綁著的是具體實現,那麼這樣會帶來乙個後果,在今後的變更中,我們不得不去修改那個類,這將

導致**的不穩定,我們還得去測試一切和這個類有關係的**,並且我們違反了乙個很重要的原則:對修改關閉原則。

我們需要將new和客戶端**分離開來

我們要做個人才網

//技能頁

class skillspage

//教育頁

class educationpage

//經驗頁

class experiencepage

//介紹頁

class introductionpage

//結果頁

class resultspage

//結論頁

class conclusionpage

//總結頁

class summarypage

//文獻頁

class bibliographypage

有了這乙個乙個的模組,我們可以接下去做具體的頁面了。

1

public

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 }

看著很舒心,根據不同需要,我們重寫了建立頁面的**,以後就不怕老闆要求多了,我只要繼承下,重寫個建立方法,最多再添點功能麼

看看客戶端呼叫,再想想工廠方法的定義

1

static

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 所示方式,乙個使用者如果要與別的使用者聊天或傳送檔案,通常需要加其他使用者為好友,使用者與使用者之間存在多對多的聯絡,這將導致系統中使用者之間的關係非常複雜,乙個使用者如果要將相同的資訊或檔案傳送給其他所有使用者,必須乙個乙個的傳...