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