1. 程式人生 > >【5min+】 設計模式的迷惑?Provider vs Factory

【5min+】 設計模式的迷惑?Provider vs Factory

系列介紹

【五分鐘的dotnet】是一個利用您的碎片化時間來學習和豐富.net知識的博文系列。它所包含了.net體系中可能會涉及到的方方面面,比如C#的小細節,AspnetCore,微服務中的.net知識等等。
5min+不是超過5分鐘的意思,"+"是知識的增加。so,它是讓您花費5分鐘以下的時間來提升您的知識儲備量。

正文

一說起設計模式,大家應該都不會太陌生。畢竟在面向物件的世界中,我們需要用到各種奇技淫巧的手段來構建我們的應用,而設計模式就是這些技巧的根本。如果您曾參與過計算機職業資格考試(俗稱軟考),就會發現:無論是初級、中級還是高階,都會有關於設計模式的考題,而且分值比重還很大。這也側面說明了,學習設計模式的重要性。

如果一談起設計模式,立馬浮現在您腦中的模式有哪些呢:“單例”、“迭代器”、“外觀”、“橋接”………… 然而,就在上週的時候,我突然遇到了這麼一個問題:當我想為建立一個物件進行抽象時,我不知道如何命名該建立類的名稱了。 您可能會說“這還不簡單,要建立肯定是屬於建立型別,那很大機率就是“XXFactory”呀,就是所謂的工廠模式”。是的,我最初的時候也是這麼想的,但是我心裡又出現了另外的一個單詞:“Provider”。

Provider? 可能有些小夥伴會有一些陌生,因為它並沒有出現在GOF所提出的24個模式中。而它又是什麼東西呢? 經過我一番查詢,發現它是由微軟在“.NET 1.1 framework”提出的一種模式。當然,距離.NET 1.1 framework釋出至今已經過了很多年了。也正是經歷了這麼多年的成長,所以微軟的許多程式碼中您都會發現“Provider”的身影。 比如咱們在AspNetCore中再熟悉不過的Logger,它就是由“ILoggerProvider”來建立的,還有依賴注入的“IServiceProvider”等等。

疑惑

可能也是因為看多了“Provider”這個單詞,所以才出現了我上面的糾結。但是,我突然想了想,既然都是向外界提供一個結果,那麼Provider和Factory到底有什麼不同呢?

於是乎,我再次嘗試了 "百度不行就谷歌" 的程式設計師大法進行一波騷操作。但是看了結果之後我的心是拔涼拔涼啊: