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

怎么把搜到自己的网站定制客户管理软件

怎么把搜到自己的网站,定制客户管理软件,广州网站设计素材,wordpress支持支付宝观察者模式 (Observer) 观察者模式 是一种行为型设计模式#xff0c;它定义了一种一对多的依赖关系#xff0c;使得当一个对象的状态发生改变时#xff0c;其依赖者#xff08;观察者#xff09;会收到通知并自动更新。 意图 定义对象之间的一对多依赖关系。当一个对象状…观察者模式 (Observer) 观察者模式 是一种行为型设计模式它定义了一种一对多的依赖关系使得当一个对象的状态发生改变时其依赖者观察者会收到通知并自动更新。 意图 定义对象之间的一对多依赖关系。当一个对象状态发生变化时通知所有依赖于它的对象。 使用场景 事件驱动系统 如 GUI 程序中的按钮点击事件按钮通知所有监听器。 数据变化通知 数据模型的变化需要通知多个视图更新。 解耦对象之间的依赖 被观察者与观察者通过接口交互降低了耦合性。 参与者角色 主题 (Subject) 被观察者维护观察者列表并在状态发生变化时通知所有观察者。 观察者 (Observer) 定义了一个接口用于接收通知并更新状态。 具体主题 (ConcreteSubject) 实现具体的主题逻辑存储状态并在状态改变时通知观察者。 具体观察者 (ConcreteObserver) 实现具体的观察者逻辑接收通知并更新状态。 示例代码 以下代码展示了观察者模式的实现使用 C 的现代特性如 std::function、std::vector、shared_ptr。 #include iostream #include vector #include memory #include functional #include string// 观察者接口 class Observer { public:virtual ~Observer() default;virtual void update(const std::string message) 0; // 接收通知 };// 具体观察者实现观察者接口 class ConcreteObserver : public Observer { private:std::string name; // 观察者名称用于标识public:explicit ConcreteObserver(const std::string observerName) : name(observerName) {}void update(const std::string message) override {std::cout 观察者 [ name ] 收到通知: message std::endl;} };// 被观察者接口 class Subject { public:virtual ~Subject() default;virtual void attach(std::shared_ptrObserver observer) 0; // 添加观察者virtual void detach(std::shared_ptrObserver observer) 0; // 移除观察者virtual void notify() 0; // 通知观察者 };// 具体被观察者实现被观察者接口 class ConcreteSubject : public Subject { private:std::vectorstd::shared_ptrObserver observers; // 存储观察者的列表std::string state; // 被观察者的状态public:void attach(std::shared_ptrObserver observer) override {observers.push_back(observer);}void detach(std::shared_ptrObserver observer) override {observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());}void setState(const std::string newState) {state newState;notify(); // 状态改变时通知所有观察者}void notify() override {for (const auto observer : observers) {observer-update(state);}} };// 客户端代码 int main() {auto subject std::make_sharedConcreteSubject();// 创建多个观察者auto observer1 std::make_sharedConcreteObserver(Observer1);auto observer2 std::make_sharedConcreteObserver(Observer2);auto observer3 std::make_sharedConcreteObserver(Observer3);// 观察者订阅被观察者subject-attach(observer1);subject-attach(observer2);subject-attach(observer3);// 修改被观察者的状态通知观察者std::cout 修改状态为: 状态A std::endl;subject-setState(状态A);// 移除一个观察者subject-detach(observer2);std::cout 修改状态为: 状态B std::endl;subject-setState(状态B);return 0; }代码解析 1. 观察者接口 (Observer) 定义了一个 update 方法用于接收通知 class Observer { public:virtual ~Observer() default;virtual void update(const std::string message) 0; // 接收通知 };2. 具体观察者 (ConcreteObserver) 实现了 Observer 接口并通过 update 方法更新状态 class ConcreteObserver : public Observer { private:std::string name;public:explicit ConcreteObserver(const std::string observerName) : name(observerName) {}void update(const std::string message) override {std::cout 观察者 [ name ] 收到通知: message std::endl;} };3. 被观察者接口 (Subject) 定义了添加、移除观察者的方法以及通知观察者的 notify 方法 class Subject { public:virtual ~Subject() default;virtual void attach(std::shared_ptrObserver observer) 0;virtual void detach(std::shared_ptrObserver observer) 0;virtual void notify() 0; };4. 具体被观察者 (ConcreteSubject) 存储观察者列表并在状态改变时通知观察者 class ConcreteSubject : public Subject { private:std::vectorstd::shared_ptrObserver observers;std::string state;public:void setState(const std::string newState) {state newState;notify(); // 状态改变时通知所有观察者}void notify() override {for (const auto observer : observers) {observer-update(state);}} };5. 客户端 客户端通过 attach 方法订阅观察者并通过 setState 方法触发通知 auto subject std::make_sharedConcreteSubject(); auto observer1 std::make_sharedConcreteObserver(Observer1); subject-attach(observer1); subject-setState(状态A);优缺点 优点 解耦 被观察者与观察者之间通过接口交互降低了依赖性。 扩展性强 可以轻松增加新的观察者而无需修改被观察者代码。 动态通知 可以在运行时动态添加或移除观察者。 缺点 通知开销 当观察者较多时通知的开销可能较大。 复杂性增加 系统中对象关系变得复杂可能导致调试困难。 适用场景 事件驱动系统 如 GUI 程序、游戏引擎等。 模型-视图结构 数据模型的变化通知视图更新。 分布式系统 如多个服务监听同一个事件源。 总结 观察者模式通过定义一对多的依赖关系解决了对象之间的动态联动问题是事件驱动系统中非常重要的设计模式。
http://www.dnsts.com.cn/news/222112.html

相关文章:

  • 网站和服务器是什么关系包头网站建设哪家好
  • 网页设计与制作教程考试试卷天津seo网络营销
  • 网站访问量怎么增加企业站seo点击软件
  • 莞城网站仿做网页打不开视频怎么办
  • 网站网页翻页设计社区网站建设论文
  • 谷歌推广网站怎么做百度搜索服务
  • 手机版网站开发公司北京电力交易中心绿色电力交易实施细则
  • 做emc的有哪些网站北京公司网站建设定制
  • 网站建设之开展电子商务wordpress中国风主题下载
  • 做暖暖在线获取网站查网站权重
  • 做网站域名备案需要多久平面设计有哪些工作岗位
  • 外贸网站建设书籍前端开发工程师怎么考
  • 哪家网站建设服务好啊在线设计平台行业概况
  • 阜新门户网站建设wordpress返利插件
  • 南京外贸网站建设报价简述如何对网站进行推广
  • p2p网站功能模块活动策划费用明细
  • 做企业网站的ui和平面设计的区别
  • 新建网站怎么想谷歌和百度提交义乌网站建设方案详细
  • 优秀旅游网站设计响应式网站建站
  • 网站建设利益分析兰州企业网站
  • 怎样查网站和增加网站慕枫宁波网站建设
  • 顺德公司做网站企业网站建设费怎么记账
  • 自学网站建设买什么书做国外购物的网站怎么发货
  • 佳木斯做微网站白银网站seo
  • 桐城市美丽乡村建设专题网站wordpress4.4.1下载
  • flashfxp如何发布网站新网站不被收录
  • 珠海网站建设最新报价wordpress视频去广告插件
  • 网站做语言切换自己做网站开发
  • 搭建好ftp服务器 如何通过网站访问网站如何屏蔽ip
  • 网站统计分析工具的主要功能王烨峰