C++ 設計模式的基本原則
設計模式基本原則
最終目的,高內聚,低耦合
開放封閉原則類的改動是通過增加代碼進行的,不是修改源代碼
銀行類案例代碼
- #include<iostream>
- using namespace std;
- class BankWorker
- {
- public:
- void save()
- {
- cout << "存款" << endl;
- }
- void moveM()
- {
- cout << "取款" << endl;
- }
- void jiaofei()
- {
- cout << "繳費" << endl;
- }
- };
- class AbBankWorker
- {
- public:
- virtual void dothing() = 0;
- };
- class SaveBanker :public AbBankWorker
- {
- public:
- virtual void dothing()
- {
- cout << "存款" << endl;
- }
- };
- class MoveBanker :public AbBankWorker
- {
- public:
- virtual void dothing()
- {
- cout << "取款" << endl;
- }
- };
- class SaveBanker :public AbBankWorker
- {
- public:
- virtual void dothing()
- {
- cout << "繳費款" << endl;
- }
- };
- void main11()
- {
- BankWorker*bw = new BankWorker;
- bw->jiaofei();
- bw->moveM();
- bw->save();
- cout << "hello..." << endl;
- system("pause");
- return;
- }
- void main22()
- {
- AbBankWorker*bw = NULL;
- bw=new MoveBanker;
- bw->dothing();
- delete bw;
- return;
- }
- void main()
- {
- main22();
- system("pause");
- return;
- }
單一職責原則類的職責要單一,對外只提供一種功能,而引起內變化的原因都應該只有一個
依賴倒置原則依賴于抽象接口,不要依賴具體的實現類,也就是針對接口編程
- #include<iostream>
- using namespace std;
- class HardDisk
- {public:
- virtual void work();
- };
- class Memory
- {
- public:
- virtual void work();
- };
- class Cpu
- {
- public:
- virtual void work();
- };
- class ComPuter
- {
- public:
- ComPuter(HardDisk*m_handdisk, Memory*m_memory, Cpu*m_cpu)
- {
- m_handdisk = handdisk;
- m_memory = memory;
- m_cpu = cpu;
- }
- public:
- void work()
- {
- m_handdisk->work();
- m_memory->work();
- m_cpu->work();
- }
- private:
- HardDisk*m_handdisk;
- Memory*m_memory;
- Cpu*m_cpu;
- };
- class InterCpu :public Cpu
- {
- public:
- void work()
- {
- cout << "我是因特爾廠家" << endl;
- }
- };
- class XSDisk :public HardDisk
- {
- public:
- void work()
- {
- cout << "我是西數硬盤廠家" << endl;
- }
- };
- class JSDMem :public Memory
- {
- public:
- void work()
- {
- cout << "我是JSDMem廠家" << endl;
- }
- };
- void main()
- {
- HardDisk*handdisk=NULL;
- Memory*memory=NULL;
- Cpu*cpu=NULL;
- handdisk = new XSDisk;
- memory= new JSDMem;
- cpu = new InterCpu;
- ComPuter*mycomputer = new ComPuter(harddisk, memory, cpu);
- mycomputer->work();
- delete mycomputer;
- delete cpu;
- delete memory;
- delete harddisk;
- cout << "hello" << endl;
- system("pause");
- return;
- }
接口隔離原則不應該強迫客戶的程序依賴他們不需要的接口方法,一個接口應該是提供一種對外功能,不應該把所有的操作都封裝到一個接口中去
里氏替換原則任何抽象類出現的地方都可以用它的實現類進行替換,實際就是虛擬機智語言級別,實現面向對象功能
優(yōu)先使用組合而不是繼承原則如果使用繼承,會導致復位的任何變化,都可能影響此類的行為,如果使用對象組合,就降低了這種依賴關系
迪米特法則一個對象應當對其他對象盡可能少的了解,從而降低各個對象之間的耦合,提高系統(tǒng)的可維護性。例如,在一個程序中,各個模塊之間相互調用時,通常會提供一個統(tǒng)一的接口來實現,這樣其他模塊不需要了解另外一個模塊的內部實現細節(jié),這樣當一個模塊內部的實現發(fā)生改變的時候,不會影響其他模塊的使用黑盒原理。