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