策略模式通過抽象接口將算法封裝為獨(dú)立類,實現(xiàn)運(yùn)行時動態(tài)切換。定義SortStrategy基類聲明sort虛函數(shù),BubbleSort、QuickSort、MergeSort等具體類實現(xiàn)各自算法。Sorter上下文類持SortStrategy指針,通過setStrategy更換策略,performSort調(diào)用當(dāng)前策略的排序方法。客戶端可靈活切換算法,新增策略無需修改現(xiàn)有代碼,符合開閉原則,避免大量條件判斷,提升可維護(hù)性與擴(kuò)展性。
在C++中實現(xiàn)策略模式選擇算法,核心是將不同算法封裝成獨(dú)立的類,并通過統(tǒng)一接口在運(yùn)行時動態(tài)切換。這種方式避免了使用大量條件判斷(如 if/else 或 switch),提高代碼的可擴(kuò)展性和可維護(hù)性。
策略模式從一個抽象基類開始,該基類聲明算法的公共接口。通常是一個虛函數(shù),供具體策略類重寫。
示例:假設(shè)我們要實現(xiàn)不同的排序算法作為策略:
class SortStrategy {<br> public:<br> &virtual ~SortStrategy() = default;<br> &virtual void sort(std::vector<int>& data) const = 0;<br> };<br>
每個具體算法繼承自策略基類,并實現(xiàn)自己的邏輯。
立即學(xué)習(xí)“C++免費(fèi)學(xué)習(xí)筆記(深入)”;
class BubbleSort : public SortStrategy {<br> public:<br> &void sort(std::vector<int>& data) const override {<br> &// 冒泡排序?qū)崿F(xiàn)<br> &}<br> };<br><br><p>class QuickSort : public SortStrategy {<br> public:<br> &void sort(std::vector<int>& data) const override {<br> &// 快速排序?qū)崿F(xiàn)<br> &}<br> };<br><br></p><p>class MergeSort : public SortStrategy {<br> public:<br> &void sort(std::vector<int>& data) const override {<br> &// 歸并排序?qū)崿F(xiàn)<br> &}<br> };<br>
Context 類持有策略對象的指針或引用,客戶端可在運(yùn)行時指定使用的算法。
class Sorter {<br> private:<br> &const SortStrategy* strategy;<br><br> public:<br> &Sorter(const SortStrategy* s) : strategy(s) {}<br><br> &void setStrategy(const SortStrategy* s) {<br> &strategy = s;<br> &}<br><br> &void performSort(std::vector<int>& data) const {<br> &if (strategy)<br> & strategy->sort(data);<br> &}<br> };<br>
根據(jù)需求切換不同算法,無需修改核心邏輯。
int main() {<br> &std::vector<int> data = {5, 2, 9, 1, 5};<br><br> &BubbleSort bubble;<br> &QuickSort quick;<br><br> &Sorter sorter(&bubble);<br> &sorter.performSort(data); // 使用冒泡排序<br><br> &sorter.setStrategy(&quick);<br> &sorter.performSort(data); // 切換為快速排序<br><br> &return 0;<br> }<br>
這種設(shè)計讓算法獨(dú)立變化,新增策略只需添加新類,不改動已有代碼。符合開閉原則,適合需要靈活替換算法的場景。
基本上就這些。關(guān)鍵在于抽象接口和運(yùn)行時綁定,用組合代替條件分支。
以上就是C++如何實現(xiàn)策略模式選擇算法的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號