获课地址:666it.top/14228/
观察者模式与原型模式:状态管理与对象复制
一、观察者模式:状态变化的广播机制
观察者模式通过主题接口与观察者接口,实现状态变化的自动通知。例如天气预报系统:
arduino
cpp
class Observer {
public:
virtual void Update(float temp) = 0;
};
class Subject {
private:
std::vector<Observer*> observers;
float temperature;
public:
void Attach(Observer* obs) { observers.push_back(obs); }
void SetTemperature(float temp) {
temperature = temp;
Notify();
}
void Notify() {
for (auto obs : observers) {
obs->Update(temperature);
}
}
};
class Display : public Observer {
public:
void Update(float temp) override {
std::cout << "Temperature updated: " << temp << "°C" << std::endl;
}
};
应用场景:事件处理系统、股票行情推送。
二、原型模式:对象的快速复制
原型模式通过克隆现有对象创建新实例,适用于需要频繁创建相似对象的场景。例如简历复制:
arduino
cpp
class Resume {
public:
virtual Resume* Clone() = 0;
};class ConcreteResume : public Resume {
private:
std::string content;
public:
ConcreteResume(const std::string& c) : content(c) {}
Resume* Clone() override {
return new ConcreteResume(content); // 浅拷贝
}
};
深拷贝实现:
typescript
cpp
class DeepCopyResume : public Resume {
private:
std::string* content;
public:
DeepCopyResume(const std::string& c) : content(new std::string(c)) {}
~DeepCopyResume() { delete content; }
Resume* Clone() override {
DeepCopyResume* newResume = new DeepCopyResume("");
newResume->content = new std::string(*content); // 深拷贝
return newResume;
}
};
优点:避免重复初始化,提高对象创建效率。