設計模式是對設計原則的具體化。用江湖話說就是武林祕籍,總結出來的一些固定套路,可以幫助有根基的程序員迅速打通任督二脈,從此做什麼都特別快。常用的模式及其場景如下
C++常見設計模式——模板模式
模板模式:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。
當多個類有相同的方法,並且邏輯相同,只是細節上有差異時,可以考慮使用模板模式。具體的實現上可以將相同的核心算法設計爲模板方法,具體的實現細節有子類實現。
缺點:每一個不同的實現都需要一個子類來實現,導致類的個數增加,使得系統更加龐大。
以生產電腦爲例,電腦生產的過程都是一樣的,只是一些裝配的器件可能不同而已。
應用場景如下:
對於一些功能,在不同的對象身上展示不同的作用,但是功能的框架是一樣的。
/*
* 關鍵代碼:在抽象類實現通用接口,細節變化在子類實現。
*/
#include <iostream>
using namespace std;
class Computer
{
public:
void product()
{
installCpu();
installRam();
installGraphicsCard();
}
protected:
virtual void installCpu() = 0;
virtual void installRam() = 0;
virtual void installGraphicsCard() = 0;
};
class ComputerA : public Computer
{
protected:
void installCpu() override
{
cout << "ComputerA install Inter Core i5" << endl;
}
void installRam() override
{
cout << "ComputerA install 2G Ram" << endl;
}
void installGraphicsCard() override
{
cout << "ComputerA install Gtx940 GraphicsCard" << endl;
}
};
class ComputerB : public Computer
{
protected:
void installCpu() override
{
cout << "ComputerB install Inter Core i7" << endl;
}
void installRam() override
{
cout << "ComputerB install 4G Ram" << endl;
}
void installGraphicsCard() override
{
cout << "ComputerB install Gtx960 GraphicsCard" << endl;
}
};
int main()
{
ComputerB* c1 = new ComputerB();
c1->product();
delete c1;
c1 = nullptr;
return 0;
}