flutter中使用建造者模式

2021-10-21 00:17:31 字數 1808 閱讀 9569

今天在我的flutter工程中遇到乙個問題,有a,b兩個頁面,在某種情況下b頁面需要跳轉到乙個新的頁面進行一些業務操做,而新的頁面和a頁面構成情況是相似的,但是業務邏輯細節上不一樣。

舊的解決方案:不建立新頁面,讓a替代這個新頁面,實現a時在細節不一樣的地方進行判斷,是進行原來的業務邏輯還是進行「新頁面」的業務邏輯。

之前只是少數情況不一樣,所以可以用這種判斷的形式來實現。但是由於業務需求的變動,「新頁面」的邏輯已經很多跟a頁面不一樣了,所以再照舊得解決方案來的話,需要判斷的地方就太多了。這也暴露了舊的解決方案實在是比較敷衍,程式可拓展性非常弱。新的解決方案應運而生。

新的解決方案:在設計模式中,針對類的創造型設計模式總共有四種:單例工廠模式,單例,建造者,模板模式。由於兩個介面的頁面構成相似,但是實現細節不同,選擇了構造者模式。

a介面和新介面的介面構成都是由頭部,左中右部,這四部分構成的。

class editor
抽象builder給出分別實現這四部分細節的抽象方法,以及乙個獲取目標類例項的乙個方法。

abstract class editorbuilder
其中包含乙個私有的目標類屬性,在實現各部分細節的時候將目標類例項的屬性填充完整,在外界通過builder獲取目標類例項時返回

class studioeditorbuilder extends editorbuilder
class editordirector

}

1.建立乙個你所需要的實體builder

2.建立乙個director,並通過director呼叫到實體builder的各方法將builder中的實體目標類填充完全。

3.用得到的目標類例項去構建乙個statelesswidget,這就是我們最終想要的介面啦。

class studioeditorwidget extends statelesswidget

}class editorwidget extends statefulwidget

class _editorwidgetstate extends state);

return true;

},child: row(

children: [

widget.editorpanel.leftwidget ?? container(),

expanded(

child: widget.editorpanel.centerwidget ?? container(),

),widget.editorpanel.rightwidget ?? container()

],),

));}}

這樣如果再新建介面的話,如果布局構造相似,就再去實現乙個新的builder實體就好了,這樣的話邏輯足夠清晰,拓展性足夠好。

有人會說復用的**很少,完全可以不這麼做,直接構造新介面好像代價更小。確實是這樣的,但是我在設計模式方面是純小白,有人說過模式設計要從過度設計開始,我覺得這句話挺對的。一直以來我都覺得我的**扁平又脆弱,感覺自己一直是那種偷懶的思維方式,這種思維往往是會給自己挖更大的坑。希望自己能夠在平常慢慢養成一種設計思維,**優雅秀氣一點,向大佬看齊!

之前一直很疑惑,為什麼有些地方看到的建造者模式可以寫成那種級聯的形式,但是按定義來看好像是我上面這種形式,給我整糊塗了,無意中看到本文的參考文章才解開疑惑。大佬跟普通人的區別大概就是能夠靈活運用所學知識,對於他們來說設計模式只是用來解決問題的**,我相信我等小菜雞先把設計模式的思維訓練起來,當經驗累積到一定程度之後也會達到融會貫通的境界的~

照虎畫?的虎:

建造者模式

1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...

建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

建造者模式

建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...