c++++ 函數(shù)設(shè)計模式的業(yè)界趨勢包括:鏈?zhǔn)椒椒ǎ╞uilder 模式):以鏈?zhǔn)椒绞秸{(diào)用方法,保持同一個實例。單例模式:確保只有一個類實例,保障數(shù)據(jù)完整性。策略模式:運行時改變算法,提升代碼靈活性。觀察者模式:對象訂閱事件并接收通知,實現(xiàn)松散耦合。工廠方法模式:分離對象創(chuàng)建邏輯與具體實現(xiàn),增強代碼擴展性。
C++ 函數(shù)設(shè)計模式的業(yè)界趨勢
隨著 C++ 編程語言的不斷發(fā)展,函數(shù)設(shè)計模式已經(jīng)成為現(xiàn)代 C++ 代碼中不可或缺的一部分。這些模式有助于提升代碼的可讀性、可重用性和可維護(hù)性。
1. 鏈?zhǔn)椒椒ǎ˙uilder 模式)
鏈?zhǔn)椒椒ㄊ且环N設(shè)計模式,它允許開發(fā)者以鏈?zhǔn)降姆绞秸{(diào)用方法,返回同一個實例。這使代碼更具可讀性和可維護(hù)性。
class MyClass { public: MyClass& AddValue(int value) { // 添加值并返回自身 return *this; } int GetResult() { // 返回計算結(jié)果 return result; } private: int result; }; int main() { MyClass myClass; int result = myClass.AddValue(1).AddValue(2).GetResult(); // 輸出 3 }
登錄后復(fù)制
2. 單例模式
單例模式確保創(chuàng)建一個類只有一個實例。這對于確保數(shù)據(jù)完整性和避免不一致非常有用。
class Singleton { private: Singleton() {} Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete; static Singleton* instance; public: static Singleton& GetInstance() { if (instance == nullptr) { instance = new Singleton(); } return *instance; } }; int main() { Singleton& instance1 = Singleton::GetInstance(); Singleton& instance2 = Singleton::GetInstance(); // instance1 和 instance2 指向同一個實例 }
登錄后復(fù)制
3. 策略模式
策略模式允許開發(fā)者在運行時改變算法。這使代碼更具靈活性和可擴展性。
class Context { private: Strategy* strategy; public: Context(Strategy* strategy) { this->strategy = strategy; } void DoOperation() { strategy->Execute(); } }; class Strategy { public: virtual void Execute() = 0; }; class ConcreteStrategyA : public Strategy { public: void Execute() { // 執(zhí)行算法 A } }; class ConcreteStrategyB : public Strategy { public: void Execute() { // 執(zhí)行算法 B } }; int main() { Strategy* strategyA = new ConcreteStrategyA(); Context context(strategyA); context.DoOperation(); // 執(zhí)行算法 A Strategy* strategyB = new ConcreteStrategyB(); context.SetStrategy(strategyB); context.DoOperation(); // 執(zhí)行算法 B }
登錄后復(fù)制
4. 觀察者模式
觀察者模式允許對象訂閱事件并自動接收事件通知。這有助于實現(xiàn)松散耦合和可擴展性。
class Subject { private: std::vector<Observer*> observers; public: void AddObserver(Observer* observer) { observers.push_back(observer); } void RemoveObserver(Observer* observer) { observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end()); } void NotifyObservers() { for (auto observer : observers) { observer->Update(); } } }; class Observer { public: virtual void Update() = 0; }; class ConcreteObserverA : public Observer { public: void Update() { // 執(zhí)行動作 A } }; class ConcreteObserverB : public Observer { public: void Update() { // 執(zhí)行動作 B } }; int main() { Subject subject; Observer* observerA = new ConcreteObserverA(); Observer* observerB = new ConcreteObserverB(); subject.AddObserver(observerA); subject.AddObserver(observerB); // 當(dāng) subject 的狀態(tài)發(fā)生變化時 subject.NotifyObservers(); }
登錄后復(fù)制
5. 工廠方法模式
工廠方法模式允許開發(fā)者分離對象創(chuàng)建的邏輯與具體實現(xiàn)。這有助于創(chuàng)建更靈活和可擴展的代碼。
class Creator { public: virtual Product* CreateProduct() = 0; }; class ConcreteCreatorA : public Creator { public: Product* CreateProduct() { return new ConcreteProductA(); } }; class ConcreteCreatorB : public Creator { public: Product* CreateProduct() { return new ConcreteProductB(); } }; class Product { public: virtual void DoSomething() = 0; }; class ConcreteProductA : public Product { public: void DoSomething() { // 執(zhí)行操作 A } }; class ConcreteProductB : public Product { public: void DoSomething() { // 執(zhí)行操作 B } }; int main() { Creator* creatorA = new ConcreteCreatorA(); Creator* creatorB = new ConcreteCreatorB(); Product* productA = creatorA->CreateProduct(); Product* productB = creatorB->CreateProduct(); productA->DoSomething(); // 執(zhí)行操作 A productB->DoSomething(); // 執(zhí)行操作 B }
登錄后復(fù)制
這些只是 C++ 函數(shù)設(shè)計模式眾多趨勢中的一部分。通過將這些模式應(yīng)用到自己的代碼中,開發(fā)者可以提升代碼的質(zhì)量和可維護(hù)性。