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

成都建设网站 scgckj滨海建设局官方网站

成都建设网站 scgckj,滨海建设局官方网站,最专业的seo公司,江苏建设厅网站文章目录 观察者模式模板模式 观察者模式 观察者模式是一种行为型设计模式#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.tj-hxxt.cn/news/228965.html

相关文章:

  • 猪八戒建站服务优化英语
  • 做阿里网站卖东西赚钱哈尔滨网站建设网站开发
  • 网址推荐你会感谢我的关于公司网络优化方案
  • 博物馆网站 微信 微博 建设方案考试资料网
  • 济南哪个网络公司建网站好网站推广策划方案3000字
  • 蓝田县建设局网站网站开发如何使用API
  • 网站制作与免费网站建设南京百度
  • 织梦制作手机网站模板免费下载湛江在线网
  • 网站建设费用计算联想用来网站开发笔记本
  • 专业建站公司提供详细的功能描述及报价seo搜索排名优化方法
  • 潍坊免费做网站微信兼职网站开发
  • 怎么免费上传网页网站公司网站建设策划
  • 陕西企业营销型网站免费的ui设计的网站
  • 如何由网页生成网站wordpress uehtml
  • 金融企业网站制作学校网站建设情况报告
  • 乔拓云建站平台没有公司可以注册网站吗
  • 网站建设推广工资货代网站制作
  • 哪些企业网站使用水墨风格邢台163最新交友
  • vip网站怎么做wordpress简约博客
  • 宁波网站开发rswl锡盟网站建设
  • 怎样做网站标题的图标东莞市建设监督网站
  • 医药网站建设客户的需求凡科快图在线
  • 武平县网站建设做网站条件
  • 河南手机网站建设管理系统前端模板
  • 辽宁建设信息网站加我vx看
  • 贵州网站建设kuhugz7k7k网页游戏
  • 网站建设合同书 虚拟做网站哪家好
  • 南阳网站seo推广公司电子商务网站建设的核心多选
  • 精品网站导航 做最好的导航大连建站企业
  • 制作网站的公司wordpress 邮箱设置