阿木博主一句话概括:C++ 设计模式实现示例详解
阿木博主为你简单介绍:设计模式是软件工程中解决常见问题的通用解决方案。在C++编程中,设计模式可以帮助我们编写更加模块化、可重用和易于维护的代码。本文将围绕C++语言,通过具体的实现示例,详细介绍几种常见的设计模式。
一、单例模式(Singleton)
单例模式确保一个类只有一个实例,并提供一个全局访问点。以下是一个简单的单例模式实现:
cpp
include
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;
}
void doSomething() {
std::cout << "Doing something..." << std::endl;
}
static void releaseInstance() {
if (instance != nullptr) {
delete instance;
instance = nullptr;
}
}
};
Singleton Singleton::instance = nullptr;
int main() {
Singleton s1 = Singleton::getInstance();
Singleton s2 = Singleton::getInstance();
std::cout << "s1 and s2 are the same instance: " << (s1 == s2) <doSomething();
Singleton::releaseInstance();
return 0;
}
二、工厂模式(Factory Method)
工厂模式定义了一个接口,用于创建对象,但让子类决定实例化哪一个类。以下是一个工厂模式的实现:
cpp
include
include
class Product {
public:
virtual void use() = 0;
virtual ~Product() {}
};
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductA" << std::endl;
}
};
class ConcreteProductB : public Product {
public:
void use() override {
std::cout << "Using ConcreteProductB" << std::endl;
}
};
class Creator {
public:
virtual std::unique_ptr createProduct() = 0;
virtual ~Creator() {}
};
class ConcreteCreatorA : public Creator {
public:
std::unique_ptr createProduct() override {
return std::make_unique();
}
};
class ConcreteCreatorB : public Creator {
public:
std::unique_ptr createProduct() override {
return std::make_unique();
}
};
int main() {
Creator creatorA = new ConcreteCreatorA();
Creator creatorB = new ConcreteCreatorB();
std::unique_ptr productA = creatorA->createProduct();
std::unique_ptr productB = creatorB->createProduct();
productA->use();
productB->use();
delete creatorA;
delete creatorB;
return 0;
}
三、观察者模式(Observer)
观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。以下是一个观察者模式的实现:
cpp
include
include
include
class Observer {
public:
virtual void update() = 0;
virtual ~Observer() {}
};
class ConcreteObserverA : public Observer {
public:
void update() override {
std::cout << "Observer A updated" << std::endl;
}
};
class ConcreteObserverB : public Observer {
public:
void update() override {
std::cout << "Observer B updated" << std::endl;
}
};
class Subject {
private:
std::vector observers;
public:
void attach(Observer observer) {
observers.push_back(observer);
}
void detach(Observer observer) {
observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());
}
void notify() {
for (Observer observer : observers) {
observer->update();
}
}
};
int main() {
Subject subject;
ConcreteObserverA observerA;
ConcreteObserverB observerB;
subject.attach(&observerA);
subject.attach(&observerB);
subject.notify(); // Both observers will be updated
subject.detach(&observerA);
subject.notify(); // Only observer B will be updated
return 0;
}
四、总结
本文通过C++语言实现了单例模式、工厂模式、观察者模式三种常见的设计模式。这些模式在软件开发中具有广泛的应用,能够帮助我们编写更加优雅和高效的代码。在实际项目中,我们可以根据具体需求选择合适的设计模式,以提高代码的可维护性和可扩展性。
Comments NOTHING