当前位置: 首页 > wzjs >正文

做调查赚钱的网站又哪些网站主题

做调查赚钱的网站又哪些,网站主题,加工网线,精品课程网站的设计与建设要求观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象(主题)状态改变时,所有依赖它的对象(观察者)都会自动得到通知并更新。 核…

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象间的一对多依赖关系,当一个对象(主题)状态改变时,所有依赖它的对象(观察者)都会自动得到通知并更新。

核心概念

设计原则

观察者模式遵循以下设计原则:

  1. 松耦合:主题和观察者之间松耦合

  2. 开闭原则:可以新增观察者而不修改主题

  3. 抽象耦合:主题只依赖观察者抽象接口

主要优点

  1. 动态订阅:观察者可动态订阅或取消订阅

  2. 广播通信:主题可通知多个观察者

  3. 解耦:分离观察者和被观察者

  4. 事件处理:适用于事件驱动系统

模式结构

主要组件

  1. Subject(主题/被观察者)

    • 维护观察者列表

    • 提供注册/注销观察者的接口

    • 状态改变时通知观察者

  2. Observer(观察者接口)

    • 定义更新接口

  3. ConcreteObserver(具体观察者)

    • 实现更新接口

    • 维护对主题的引用(可选)

完整代码示例

#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>
#include <string>// ==================== 观察者接口 ====================
class Observer {
public:virtual void update(const std::string& message) = 0;virtual ~Observer() = default;
};// ==================== 主题接口 ====================
class Subject {std::vector<Observer*> observers_;std::string state_;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 (auto observer : observers_) {observer->update(state_);}}void setState(const std::string& state) {state_ = state;notify();}std::string getState() const {return state_;}
};// ==================== 具体观察者 ====================
class ConcreteObserver : public Observer {std::string name_;std::string observerState_;Subject* subject_;public:ConcreteObserver(const std::string& name, Subject* subject): name_(name), subject_(subject) {subject_->attach(this);}~ConcreteObserver() {if (subject_) {subject_->detach(this);}}void update(const std::string& message) override {observerState_ = message;std::cout << "观察者 " << name_ << " 收到更新: " << observerState_ << std::endl;}void unsubscribe() {if (subject_) {subject_->detach(this);subject_ = nullptr;}}
};// ==================== 客户端代码 ====================
int main() {std::cout << "=== 观察者模式演示 ===" << std::endl;// 创建主题Subject subject;// 创建观察者ConcreteObserver observer1("观察者1", &subject);ConcreteObserver observer2("观察者2", &subject);ConcreteObserver observer3("观察者3", &subject);// 改变主题状态,观察者会自动收到通知std::cout << "\n第一次状态改变:" << std::endl;subject.setState("状态1");// 观察者2取消订阅observer2.unsubscribe();// 再次改变状态std::cout << "\n第二次状态改变(观察者2已取消订阅):" << std::endl;subject.setState("状态2");// 动态添加新观察者std::cout << "\n添加新观察者:" << std::endl;ConcreteObserver observer4("观察者4", &subject);subject.setState("状态3");return 0;
}

模式变体

1. 推模型 vs 拉模型

// 推模型 - 主题将详细数据推送给观察者
class PushObserver {
public:virtual void update(int temp, int humidity, float pressure) = 0;
};// 拉模型 - 观察者从主题拉取所需数据
class PullObserver {
public:virtual void update(Subject* subject) = 0; // 观察者自己获取数据
};

2. 使用智能指针管理观察者

class SafeSubject {std::vector<std::weak_ptr<Observer>> observers_;void notify() {auto it = observers_.begin();while (it != observers_.end()) {if (auto observer = it->lock()) {observer->update(state_);++it;} else {it = observers_.erase(it);}}}
};

3. 线程安全的观察者模式

#include <mutex>class ThreadSafeSubject {std::vector<Observer*> observers_;mutable std::mutex mtx_;public:void attach(Observer* observer) {std::lock_guard<std::mutex> lock(mtx_);observers_.push_back(observer);}void notify() {std::vector<Observer*> observersCopy;{std::lock_guard<std::mutex> lock(mtx_);observersCopy = observers_;}for (auto observer : observersCopy) {observer->update(state_);}}
};

实际应用场景

  1. GUI事件处理:按钮点击、键盘输入等事件监听

  2. 发布-订阅系统:消息队列、新闻推送

  3. 股票行情更新:股价变动通知投资者

  4. 游戏引擎:游戏状态变化通知UI更新

  5. 分布式系统:配置变更通知多个节点

http://www.dtcms.com/wzjs/372579.html

相关文章:

  • 网站建设技术服务方案如何购买域名
  • 景泰建设中国官方网站百度高搜
  • 怎么给一个花店做网站建设企业推广文案范文
  • 用axure做高保真旅游网站重庆网站seo公司
  • 企业黄页到哪里买企业网站推广优化
  • 南昌手机网站制作软文通
  • 怎样注册小程序店铺网站优化设计公司
  • 厦门网站建设制作工具网站改版公司哪家好
  • 广西建设科技与建筑节能协会网站360优化大师app下载
  • 网站怎么做301定向湘潭网站设计外包服务
  • wordpress数据包企业网站seo案例分析
  • 网站开发的教学网站企业网络
  • 购物网站seo企业网站推广建议
  • 网站三级域名国际时事新闻2022最新
  • 日本女做受网站抖音关键词排名优化软件
  • 网页设计与网站制作知识框架网店推广平台有哪些
  • 北京住房投资建设中心网站首页搜索自媒体平台
  • 我爱做妈妈网站济宁百度推广开户
  • 合肥新站区有做网站的吗我想做百度推广
  • 网站建设公司厦门有哪些sem推广计划
  • 四川省住房和城乡建设局网站首页seo搜索引擎优化公司
  • 做网站要不要交税俄罗斯搜索引擎yandex推广入口
  • 一个网站的建设步骤seo关键词排名优化费用
  • 浙江义乌小商品批发进货网信息流广告优化师
  • 如何建设独立的免费网站营销策划的十个步骤
  • 如何制作一个单页网站百度浏览器网址是多少
  • 如何做网站客户案例百度推广优化技巧
  • 电销做网站的话术精准引流的网络推广方法
  • 仿ecshop模板堂网站花关键词排名系统
  • 类似淘宝网站建设费用百度网站优化软件