ホームページ  >  記事  >  バックエンド開発  >  C++ 関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用

C++ 関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用

PHPz
PHPzオリジナル
2024-04-19 17:06:01871ブラウズ

シングルトン モード: 関数のオーバーロードを通じて、シングルトン インスタンスにさまざまなパラメーターを提供します。ファクトリ パターン: 関数の書き換えを通じてさまざまなタイプのオブジェクトを作成し、作成プロセスを特定の製品クラスから切り離します。

C++ 函数重载和重写中单例模式与工厂模式的运用

#C での関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用

シングルトン モード

関数のオーバーロード

シングルトン モードは、関数のオーバーロードを通じて実装できます。オーバーロードされた関数には異なるパラメーター リストがあるため、異なるインスタンスが返されます。

class Singleton {
public:
    static Singleton* getInstance() {
        if (instance_ == nullptr) {
            instance_ = new Singleton();
        }
        return instance_;
    }

    static Singleton* getInstance(int arg) {
        if (instance_ == nullptr) {
            instance_ = new Singleton(arg);
        }
        return instance_;
    }

private:
    Singleton() = default;
    Singleton(int arg);
    static Singleton* instance_;
};

実際的なケース

2 つのシングルトン オブジェクトを作成します。1 つはパラメータ付き、もう 1 つはパラメータなしです。

int main() {
    Singleton* instance1 = Singleton::getInstance();
    Singleton* instance2 = Singleton::getInstance(10);

    // 检查两个实例是否相同
    if (instance1 == instance2) {
        std::cout << "两个实例相同" << std::endl;
    } else {
        std::cout << "两个实例不相同" << std::endl;
    }
}

ファクトリ モード

関数の書き換え

ファクトリ モードは、関数の書き換えによって実装できます。書き換えられた関数は、実装が異なると異なるオブジェクトを作成します。

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

class ConcreteProductA : public Product {
    // ...
};

class ConcreteProductB : public Product {
    // ...
};

class Factory {
public:
    virtual ~Factory() {}
    virtual Product* createProduct() = 0;
};

class ConcreteFactoryA : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductA();
    }
};

class ConcreteFactoryB : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductB();
    }
};

実際的なケース

2 つのファクトリ オブジェクトを作成し、各オブジェクトは異なる製品タイプを作成します。

rree

以上がC++ 関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。