《從設計到模式》學習筆記part1

2022-02-24 08:05:56 字數 2660 閱讀 6948

(教程前5節免費預覽,可以試看一下)

一 .  設計原則

不管什麼新的技術,新的技能,他的產生比較導致一些標誌,以及一些標誌的產生,如果沒有這些標準來衡量的話,那我們也沒辦法知道他新在**,怎麼去判斷,所以作為設計模式,那麼必然也會有他的設計原則和標準在裡面,如果這些標準和原則,那我們沒辦法去設計了。

1.   s -單一職責原則:

乙個類只能有乙個讓它變化的原因。(我的理解是乙個類就幹它應該幹的事情,比如我的乙個郵件類,那麼我這個類就只管我郵件傳送,註冊相關的功能,不會再這個類裡面還做什麼會員註冊等到其他的功能,單一化原則,我覺得就是單一化模組功能。)

2.   o -開放封閉原則:

對擴充套件開放,對修改封閉。(我的理解是後期隨著業務已經功能的擴充套件,這個類只允許擴充套件功能,不允許修改--也就是對擴充套件開發,對修改關閉)

3.   l - liskov原則:

子類可以完全覆蓋父類。(我的理解 類似與子類對抽象類中的抽象方法的重寫override)

4.   i -介面隔離原則:

每個介面都實現單一的功能。(我的理解是功能單一化,新的功能重新增加新的介面和方法,禁止在原來的介面上修改,禁止出現臃腫的介面--這裡同時符合單一職責原則和開發封閉原則。)

5.d –依賴倒置原則:

具體依賴於抽象,而非抽象依賴與具體。即,要把不同子類的相同功能抽象出來,依賴與這個抽象,而不是依賴於具體的子類。(我的理解是,相同功能的功能和模組,我們把這些相同的功能抽象出來,放到這個抽象的類中,然後通過子類去實現這些重新中的方法即可,我們這裡依賴抽象的,而不是具體的某個子類)

既然上面的這些標準和原則出來了,那麼我們就想當然的去建立物件,當然建立的物件必須要遵循上面的這些設計原則。

二 . 建立乙個物件

1  限制單一物件 

在我們實際專案中有很多在系統中必須限制乙個入口的地方,比如資料庫連線的字段,系統訪問次數等等,那麼作為設計者如何去規避其他的不正規操作,或者限制他就是僅能建立乙個物件呢? 這是就出現了單例模式,那麼他的出現就是為了限制單一物件,僅有乙個。

那麼啥是單例模式,他的怎麼設計的?

class singleton

private static singleton instanc;

private singleton ()  //注意這裡必須用 private 私有的,這樣才不能被外界new乙個新的物件 ,保證了唯一性

public static singleton getinstanc()

if(instanc==null)  

instanc=new singleton (); // 讓內部去例項化保證了唯一性

return instanc;

當然不是所有的都想要實現唯一性的就必須使用單例模式,我們也可以使用靜態類,靜態方法,配置檔案,全域性量量都可。

2 拷貝建立 --原型模式

建立物件我們可以通過new去建立,但是當我們需要建立乙個兩個一模一樣的物件的時候,這時候就問題來了,是不是我們必須用new重新去建立乙個物件,然後把對應物件的屬性值乙個個的去賦值一遍,如果這樣的話那多麻煩,如果物件的屬性很多,那將是繁瑣的工作量,當然這裡就出現了拷貝建立的功能設計--轉殖。

c# 在內建的庫中已經幫我們定義了這種功能介面 ---icoloneable,因此我們不需要在去定義了,**需要用到了這個功能的時候我們只需要實現這個介面就好。  

3 建立家族   ---簡單工廠模式

那麼這裡就用乙個簡單的案例來分析理解:我們試想一下這種場景,當初我們開發的系統用的是sql資料,但是隨著業務的擴充套件的需要,需要換其他的oracle資料庫了,當初我們使用的 

sqldbhelper  heleper=new sqldbhelper();

修改成oracledbhelper heleper=new oracledbhelper();

如何後期又要修改其他的資料庫型別呢? 那我們是不是又要寫乙個新的new??

那麼我們這裡可以抽象乙個 idbhelper,那業務實現,我們只需要 idbhelper = new sqldbhelper(); 或者 idbhelper =oracledbhelper()   等等其他型別的資料庫,這裡不需要修改太多即可完成業務上面的需要。

以上只是幾個簡單的工廠模式小小應用,另外還有工廠方法模式,抽象工廠模式,都是在這個簡單工廠模式上面的在抽象,分離,演變而來。

總結一下:

簡單的工廠:只是將物件的建立過程簡單的封裝而已

工廠方法:在簡單工廠的基礎上,將建立過程抽象,派生出子類,又具體的子類建立物件,適合建立乙個組合物件。

抽象工廠:在抽象方法的基礎上,每個子類都被賦予建立多個物件的建立功能,適合建立乙個家族物件,

在實際應用中,程式需要哪種工廠模式,需要根據業務以及不同的複雜程度來使用。

4 複雜多配置物件 --建造者模式

我們把物件建立的過程抽象出來,做成乙個框架,然後派生不同的子類,來實現不同的配置,將複雜物件的構建與其表示分離,這就是建造者模式

其實不管上面多少種模式,他們的所遵循的原則還是上面說到的幾個原則,百變不離其中。

《大話設計模式》學習筆記 part1

物件導向的好處 可維護 可復用 可擴充套件 靈活性好 讓業務邏輯和介面邏輯分開,降低耦合度 在計算器的案例中,建立乙個單獨的運算符號類,用來例項化運算符號物件,並把此物件返回給呼叫者 各種運算方法也分別用不同的類來封裝。在主方法中,選擇需要所例項化的運算符號類的型別 用switch判斷 來例項化相應...

C 程式設計筆記 part 1

c 物件導向程式設計 第三版 杜茂康等編 c how to program,ninth edition p.deitel h.deitel 測試1 由於char只讀取乙個資料,那麼考慮如下 int main 結果為輸出 3 4以及 3 45再考慮連續輸入 cin a b 與一般的輸入方式沒有區別。注...

Python學習筆記 part1 資料型別

單引號 hello hello word print hello 雙引號 hello hello word print hello 三引號可換行 hello hello word print hello 字串既有單引號又有雙引號時可以用三引號 hello it s good print hello ...