【c++】29.设计模式总结
持續更新中…
1.有個通用的使用多態、虛函數 的方法:
- 1.定義一個容器,其中的元素類型是基類,在容器中存入不同子類類型的指針。
- 2.不同子類中定義自己的接口虛函數。
- 3.當遍歷該容器時,會根據該容器中的不同類型自動調用不同子類的接口函數。
2.如果增加一個需求 或者 更改一個需求很頻繁時候
做法是:
- 1.先定義一個基類Base_A,在這個基類定義公共的一個接口虛函數 Func();
- 2.再定義子類 Derived_B、Derived_C 繼承于這個基類 Base_A,在子類 Derived_B、Derived_C 中去具體實現這個需求的虛函數接口Func()。
- 3.在另一個類Class_C中定義一個容器(以vector容器為例)std::vector<Base_A*> Vct,通過在容器Vct中 增加或者修改要使用的具體子類類型 Derived_B 或 Derived_C 的對象.
當遍歷該容器Vct時,會根據該容器中的不同類型自動調用不同子類的接口函數Func()。
3.區分組合和聚合的方法:生命周期是否一致。一致的是組合,不一致的是聚合。
中間的裝飾器是為了提取公共代碼???
4.單一職責原則:一個類只有一個變化的原因。
5.依賴倒置原則:應該依賴抽象,而不應該依賴實現細節。(李老師說了一句,這里的依賴指的是編譯時依賴???)
6.面向接口編程:最簡單的一個表現形式就是,變量要聲明成 抽象基類。
只要是new出來的,都是實現細節,是細節依賴,緊耦合(依賴具體類)。Base *A=new Derived();這種做法違背依賴倒置原則。因為Base *A是抽象基類接口,而new Derived()帶來的是細節依賴,緊耦合(依賴具體類)?!S模式講解
7.虛函數就是延時到運行時!
虛函數就是把函數的調用延時到運行時確定!
8.C++的多態性分為兩種:編譯時的多態、運行時的多態; 使用重載來實現編譯時的多態,使用虛函數來實現運行時的多態。
如果要用多態,就必須使用指針。
9.為什么多態必須使用指針?
答:參考博客 https://www.cnblogs.com/yinheyi/p/10525543.html
10.工廠模式里面講到:設計模式不是把變化消滅掉了,而是把變化限定到了一個局部位置。
工廠模式里面就是,類 MainForm 的整體看上去沒有依賴任何具體類,他里面實用的都是抽象類。 抽象類A* a = 抽象類B對象指針->createA(); 其中 createA() 返回一個 抽象類A 的對象指針。我們通過在MainForm的構造函數(或者它的接口函數)傳入一個B的具體子類指針,然后把該指針賦值給 抽象類B對象指針。這樣這個B的具體子類并不在類 MainForm中定義創造,而是通過參數傳進來,就保證了類MainForm中全部都是抽象的、穩定的。
李老師的代碼為了突出重點,new之后,都沒有規范寫delete,但是我們實際開發一定要記得寫delete。不想寫就使用智能指針shared_ptr聲明類別變量,然后使用make_shared進行初始化。
11.多態只對于虛函數來說。
對于類中的非虛函數,不能通過 把子類對象賦值給基類對象,或者 把子類指針賦值給基類指針的方式,即,假設子類Derived有一個func()普通成員函數,基類Base沒有,不能通過Derived derived; Base base=derived; base.func()或者 Base *base= new Derived();,base->func();的方式來調用到子類的func非虛函數(普通成員函數)。
總結
以上是生活随笔為你收集整理的【c++】29.设计模式总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【c++】28.虚析构函数、纯虚函数
- 下一篇: 【c++】30.为什么可以通过指针或引用