【揭秘面向對象設計模式】解鎖高效編程的層次奧秘

提問者:用戶FGEB 發布時間: 2025-06-08 02:37:48 閱讀時間: 3分鐘

最佳答案

引言

面向東西編程(OOP)是現代軟體開辟的基本之一。它供給了一種構造代碼的富強方法,經由過程封裝、持續跟多態等特點,進步了代碼的可重用性、可保護性跟可擴大年夜性。計劃形式,作為面向東西編程的高等現實,是順序員在臨時開辟過程中積聚的寶貴經驗總結。本文將深刻探究面向東西計劃形式,提醒其在高效編程中的檔次奧秘。

計劃形式概述

計劃形式是一套被反覆利用、少數人知曉、經過分類編目標、代碼計劃經驗的總結。利用計劃形式的目標如下:

  1. 可重用代碼:經由過程計劃形式,可能創建可重用的代碼庫,進步開辟效力。
  2. 易於懂得:計劃形式供給了代碼實現的通用模板,有助於他人懂得代碼。
  3. 保證代碼堅固性:遵守計劃形式可能降落錯誤產生的概率,進步代碼的堅固性。

計劃形式平日根據其目標分為以下三類:

  • 創建型形式:處理東西的創建過程,包含工廠形式、單例形式跟制作者形式等。
  • 構外型形式:處理類跟東西的組合,包含適配器形式、裝潢器形式跟代辦形式等。
  • 行動型形式:側重於東西間的通信跟交互,包含戰略形式、察看者形式跟命令形式等。

創建型形式

工廠形式(Factory Pattern)

工廠形式用於創建東西,並暗藏創建邏輯,解耦客戶端代碼與具體類。它包含工廠類跟產品類。

class Product {
public:
    virtual ~Product() {}
};

class ConcreteProductA : public Product {
public:
    // 實現具體產品A
};

class ConcreteProductB : public Product {
public:
    // 實現具體產品B
};

class Factory {
public:
    static Product* CreateProduct(std::string type) {
        if (type == "A") {
            return new ConcreteProductA();
        } else if (type == "B") {
            return new ConcreteProductB();
        }
        return nullptr;
    }
};

單例形式(Singleton Pattern)

單例形式確保一個類只有一個實例,並供給全局拜訪點。

class Singleton {
private:
    static Singleton* instance;
    Singleton() {}
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

public:
    static Singleton* GetInstance() {
        if (instance == nullptr) {
            instance = new Singleton();
        }
        return instance;
    }
};

制作者形式(Builder Pattern)

制作者形式分步構建複雜東西,支撐可選設置。

class Builder {
public:
    virtual void BuildPartA() = 0;
    virtual void BuildPartB() = 0;
    virtual Product* GetResult() = 0;
};

class ConcreteBuilder : public Builder {
private:
    Product* product;
public:
    ConcreteBuilder() : product(new Product()) {}
    void BuildPartA() override {
        product->AddPartA();
    }
    void BuildPartB() override {
        product->AddPartB();
    }
    Product* GetResult() override {
        return product;
    }
};

class Director {
public:
    Builder* builder;
    Director(Builder* b) : builder(b) {}
    void Construct() {
        builder->BuildPartA();
        builder->BuildPartB();
    }
};

構外型形式

適配器形式(Adapter Pattern)

適配器形式讓不兼容介面的類協同任務,經由過程轉換介面。

class Target {
public:
    virtual void Request() = 0;
};

class Adaptee {
public:
    void SpecificRequest() {
        // 實現特定的懇求
    }
};

class Adapter : public Target {
private:
    Adaptee* adaptee;
public:
    Adapter(Adaptee* a) : adaptee(a) {}
    void Request() override {
        adaptee->SpecificRequest();
    }
};

裝潢器形式(Decorator Pattern)

裝潢器形式在不改變原有東西構造的情況下,靜態增加新行動。

class Component {
public:
    virtual void Operation() = 0;
};

class ConcreteComponent : public Component {
public:
    void Operation() override {
        // 實現具體操縱
    }
};

class Decorator : public Component {
protected:
    Component* component;
public:
    Decorator(Component* c) : component(c) {}
    void Operation() override {
        component->Operation();
        // 增加新行動
    }
};

代辦形式(Proxy Pattern)

代辦形式作為一個佔位符,用於拜訪另一個東西。

class Subject {
public:
    virtual void Request() = 0;
};

class RealSubject : public Subject {
public:
    void Request() override {
        // 實現具體懇求
    }
};

class Proxy : public Subject {
private:
    RealSubject* realSubject;
public:
    Proxy(RealSubject* rs) : realSubject(rs) {}
    void Request() override {
        realSubject->Request();
    }
};

行動型形式

戰略形式(Strategy Pattern)

戰略形式在運轉時從一組可調換的戰略中抉擇演算法或行動。

class Strategy {
public:
    virtual void AlgorithmInterface() = 0;
};

class ConcreteStrategyA : public Strategy {
public:
    void AlgorithmInterface() override {
        // 實現戰略A
    }
};

class ConcreteStrategyB : public Strategy {
public:
    void AlgorithmInterface() override {
        // 實現戰略B
    }
};

class Context {
private:
    Strategy* strategy;
public:
    Context(Strategy* s) : strategy(s) {}
    void SetStrategy(Strategy* s) {
        strategy = s;
    }
    void ContextInterface() {
        strategy->AlgorithmInterface();
    }
};

察看者形式(Observer Pattern)

察看者形式樹破一對多的依附關係,當一個東西狀況改變時,全部它的依附東西都會收到告訴。

class Subject {
private:
    std::list<Observer*> observers;
public:
    void Attach(Observer* o) {
        observers.push_back(o);
    }
    void Notify() {
        for (Observer* o : observers) {
            o->Update();
        }
    }
};

class Observer {
public:
    virtual void Update() = 0;
};

class ConcreteObserverA : public Observer {
public:
    void Update() override {
        // 實現具體更新
    }
};

命令形式(Command Pattern)

命令形式用一個東西封裝執舉舉措或觸發變亂所需的全部信息。

class Command {
public:
    virtual void Execute() = 0;
};

class ConcreteCommandA : public Command {
private:
    Receiver* receiver;
public:
    ConcreteCommandA(Receiver* r) : receiver(r) {}
    void Execute() override {
        receiver->Action();
    }
};

class Receiver {
public:
    void Action() {
        // 實現具體舉措
    }
};

總結

面向東西計劃形式是順序員寶貴的經驗總結,它有助於進步代碼的可重用性、可保護性跟可擴大年夜性。經由過程本文的介紹,妳應當曾經迎面向東西計劃形式有了更深刻的懂得。在現實編程中,根據具體須要抉擇合適的計劃形式,將有助於妳構建高品質、可保護的軟體系統。

相關推薦