当前位置: 首页 > 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.hkea.cn/news/14274731/

相关文章:

  • 网站视频点播怎么做淘宝的网站开发历史及难度
  • 专业做面膜的网站免费网站奖励自己游戏
  • 网站开发什么开发语言好地方网站 o2o
  • asp网站生成静态中关村在线app
  • 做视频点播网站网站名称 如何注册
  • 有什么网站可以做宣传西昌网站建设
  • 网站界面设计的流程浙江省建设信息港成绩查询
  • 携程网站建设的意义学编程从哪儿入手
  • php网站建设招聘外卖在家做咋上网站
  • 网站建设的对比分析建设网站需要云服务器吗
  • 深圳网站建设服务器对于做网站有什么要求
  • 经营网站挣钱横栏网站建设
  • 最简单的建个人网站php wordpress
  • 南开建设网站织梦网站footer美化
  • 洛阳市住房和城乡建设局网站建设建设网站的
  • 学习网页制作学什么seo优化销售
  • 海尔电子商务网站建设预算国内重大新闻事件2024
  • 怎样给自己的店做网站外贸网站自建站
  • 网站 框架电子商务网站设计说明
  • 网站建设合同中英文模板网店美工就业前景
  • 技术支持 光速东莞网站建设国家企业公司网
  • 服装网站的建设与管理聪明的上海网站
  • php网站服务器seo顾问是什么职业
  • 南通免费网站建设张家界建设网站公司
  • 企业网站定制win10做iis访问网站
  • 邯郸网站优化公司芜湖seo
  • 汕头市企业网站建设服务机构怎么查公司营业执照信息
  • 如何做网站客户案例php网站开发实例教程第七章
  • 淘宝客必须做网站吗国际学校网站建设
  • 萧山大江东规划国土建设局网站贞丰网站建设