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

成都建设网站 scgckj网上购物平台有哪些?

成都建设网站 scgckj,网上购物平台有哪些?,顺义网站制作,画网站 模板文章目录 观察者模式模板模式 观察者模式 观察者模式是一种行为型设计模式#xff0c;它定义了一种一对多的依赖关系#xff0c;让多个观察者对象同时监听某一个主题对象#xff0c;当主题对象发生变化时#xff0c;它的所有观察者都会收到通知并进行相应的处理。 观察者… 文章目录 观察者模式模板模式 观察者模式 观察者模式是一种行为型设计模式它定义了一种一对多的依赖关系让多个观察者对象同时监听某一个主题对象当主题对象发生变化时它的所有观察者都会收到通知并进行相应的处理。 观察者模式包含以下几个角色 抽象主题Subject定义了被观察的对象接口它可以增加和删除观察者对象以及通知观察者对象。具体主题ConcreteSubject实现了抽象主题接口它具有添加、删除观察者对象的功能。通常是被观察的对象。抽象观察者Observer定义了观察者接口它具有更新数据的方法当接收到主题通知时被调用。具体观察者ConcreteObserver实现了观察者接口它保存一个指向具体主题对象的引用实现了更新数据的方法以便自身状态与主题状态协调。 观察者模式的核心思想是当一个对象的状态发生改变时所有依赖于它的对象都将得到通知并自动更新。这种模式的优点是将观察者和被观察者解耦使得程序的扩展性和复用性更加容易可以动态地添加和删除观察者从而避免了代码的臃肿和复杂性。 观察者模式在实际应用中非常常见例如在图形界面开发中窗口、按钮等组件就可以作为被观察者而事件监听器就可以作为观察者。此外观察者模式还可以用于日志记录、消息队列等领域。 下面是一个C实现的简单观察者模式案例 #include iostream #include vectorusing namespace std;// 抽象主题类 class Subject { public:virtual void attach(class Observer* observer) 0;virtual void detach(class Observer* observer) 0;virtual void notify() 0; };// 具体主题类 class ConcreteSubject : public Subject { public:void attach(Observer* observer) override {observers.push_back(observer);}void detach(Observer* observer) override {for (auto it observers.begin(); it ! observers.end(); it) {if (*it observer) {observers.erase(it);break;}}}void notify() override {for (auto observer : observers) {observer-update();}}void setState(int state) {this-state state;notify();}int getState() const {return state;}private:vectorObserver* observers;int state; };// 抽象观察者类 class Observer { public:virtual void update() 0; };// 具体观察者类 class ConcreteObserver : public Observer { public:ConcreteObserver(ConcreteSubject* subject) : subject(subject) {subject-attach(this);}~ConcreteObserver() override {subject-detach(this);}void update() override {cout Observer received notification: subject-getState() endl;}private:ConcreteSubject* subject; };int main() {ConcreteSubject subject;// 添加两个观察者ConcreteObserver observer1(subject);ConcreteObserver observer2(subject);// 改变主题状态触发通知subject.setState(1);// 移除一个观察者subject.detach(observer2);// 再次改变主题状态触发通知subject.setState(2);return 0; }这个示例中Subject 定义了主题类的接口包括添加、删除观察者和通知观察者的方法, ConcreteSubject 继承了 Subject并实现了具体的主题类其中 setState 方法改变主题的状态并调用 notify 方法通知所有观察者Observer 定义了观察者类的接口包括更新数据的方法; ConcreteObserver 继承了 Observer并实现了具体的观察者类它保存了一个指ConcreteSubject 的引用当 ConcreteSubject 的状态发生改变时会自动更新。 在 main 函数中我们创建了一个 ConcreteSubject 对象并添加了两个观察者然后改变主题状态触发通知。接着我们移除了一个观察者并再次改变主题状态验证只有一个观察者收到了通知。 模板模式 模板模式Template Pattern是一种行为设计模式它定义了一个算法的骨架而将某些步骤延迟到子类中实现。模板模式使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。 模板模式的核心思想是定义一个抽象基类其中包含了一些算法的共性以及一些抽象方法这些抽象方法会在具体子类中实现。然后定义一个模板方法其中包含了一个算法的骨架它通过调用基类中的方法来实现算法的各个步骤。具体子类可以通过重写基类中的抽象方法来实现算法的个性化定制。 以下是一个简单的 C 实现示例 #include iostreamusing namespace std;// 抽象类 class AbstractClass { public:virtual void primitiveOperation1() 0;virtual void primitiveOperation2() 0;void templateMethod() {primitiveOperation1();primitiveOperation2();} };// 具体类A class ConcreteClassA : public AbstractClass { public:void primitiveOperation1() override {cout ConcreteClassA::primitiveOperation1() endl;}void primitiveOperation2() override {cout ConcreteClassA::primitiveOperation2() endl;} };// 具体类B class ConcreteClassB : public AbstractClass { public:void primitiveOperation1() override {cout ConcreteClassB::primitiveOperation1() endl;}void primitiveOperation2() override {cout ConcreteClassB::primitiveOperation2() endl;} };int main() {AbstractClass* a new ConcreteClassA;a-templateMethod();AbstractClass* b new ConcreteClassB;b-templateMethod();return 0; }在这个示例中AbstractClass 是抽象基类其中包含了一个模板方法 templateMethod它通过调用两个抽象方法 primitiveOperation1 和 primitiveOperation2 实现算法的骨架。ConcreteClassA 和 ConcreteClassB 继承自 AbstractClass并分别实现了自己的具体算法即实现 primitiveOperation1 和 primitiveOperation2。 在 main 函数中我们先创建了一个 ConcreteClassA 对象并调用了其 templateMethod 方法它的具体算法是先执行 primitiveOperation1然后执行 primitiveOperation2。接着我们创建了一个 ConcreteClassB 对象同样调用了其 templateMethod 方法其具体算法和 ConcreteClassA 有所不同。 模板模式的优点在于它使得算法的框架和具体实现分离降低了实现算法的难度和维护成本并且可以在不改变算法结构的情况下方便地扩展和修改算法的具体实现。模板模式还可以提高代码的复用性避免了代码重复。 模板模式的缺点在于它需要定义抽象类和具体类这样就增加了代码的复杂度和阅读难度。此外模板模式还可能导致类的层次结构变得更加复杂需要进行仔细的设计。 总的来说模板模式适用于需要实现一些具体算法但是算法中的某些步骤可能存在差异需要在子类中进行定制的情况。它可以让代码更加简洁易于维护同时提高代码的复用性和扩展性。
http://www.dnsts.com.cn/news/71548.html

相关文章:

  • 购买虚拟机建网站安通建设有限公司网站
  • 自适应网站开发书籍如何给企业做网站推广
  • 精品网站建设费用做视频用的网站有哪些
  • 重庆渝能建设集团有限公司网站营销策划书模板范文
  • 做网站支持提现支付宝国产apple
  • 安阳网站建设公司用什么软件快速做网站
  • 如何在网站上添加备案号网站建设带服务器
  • 北京免费网站建设模板宁波优化关键词首页排名
  • 深圳建网站的免费商用的cms
  • 网站建设答辩增城电子商务网站建设
  • 北京 网站设计 公司贸易平台有哪些
  • 超市营销型网站建设策划书产品品牌推广策划方案
  • 网站建设优化西安家装网站做
  • wordpress如何进入后台邯郸网站优化平台
  • 奔驰宝马游戏网站建设网站建设自评报告
  • 宿迁网站建设哪家最好wordpress 免费空间
  • 上海信息公司做网站为加强政协网站建设
  • 只做黑白摄影的网站济宁做网站大约多少钱
  • 织梦网站字体资阳做网站
  • 目前提供目录类搜索引擎的网站网站开发工程师年度总结
  • 重庆网站品牌推广wordpress 说说
  • 最好的餐饮设计网站建设做宣传用什么网站好
  • 网站怎么做查询功能网站网站平台建设方案
  • 佛山网站建设方案策划wordpress 注释模版
  • 网络营销前景和现状分析深圳网站的优化公司哪家好
  • 定陶区城乡建设局网站网站空间购买多少钱
  • win2012 iis 新建网站即将发布的新品手机
  • 网站改版用新空间好吗我的网站百度怎么搜索不到
  • 美食网网站建设目的免费自助建站排名
  • 泰安网站建设推广优化苍南龙港做网站店铺