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

湖南做网站 地址磐石网络站长之家最新网站

湖南做网站 地址磐石网络,站长之家最新网站,网站建设丿金手指谷哥14,东营港新闻最新消息访问者模式是一种行为型设计模式,它可以在不修改现有代码结构的情况下,为复杂的对象结构添加新的操作。该模式将数据结构和数据操作进行分离,使得数据结构可以独立于操作进行变化,同时也可以在不改变操作的前提下增加新的操作。 在…

        访问者模式是一种行为型设计模式,它可以在不修改现有代码结构的情况下,为复杂的对象结构添加新的操作。该模式将数据结构和数据操作进行分离,使得数据结构可以独立于操作进行变化,同时也可以在不改变操作的前提下增加新的操作。
在访问者模式中,主要有以下几个角色:
① 访问者(Visitor):定义了对每个元素对象访问时所要执行的操作,可以通过多态实现针对不同元素的不同操作。
② 具体访问者(ConcreteVisitor):实现了访问者定义的接口,完成对元素对象的具体操作。
③ 元素(Element):定义了一个 `accept` 方法,用于接受访问者的访问。
④ 具体元素(ConcreteElement):实现了元素定义的接口,通常会在 `accept` 方法中调用访问者的方法。
⑤ 对象结构(ObjectStructure):包含一个元素的集合,通常提供一个方法让访问者遍历所有元素。
访问者模式适用于对象结构比较稳定,但经常需要在此对象结构上定义新的操作的情况,或者有复杂的对象结构需要一些独立的操作的情况。

1、场景设计

实现场景:对象结构中定义A、B两个元素,访问者对它们进行访问。

2、C++实现

`Visitor` 是抽象访问者类,`ConcreteVisitor` 是具体访问者类,`Element` 是抽象元素类,`ConcreteElementA` 和 `ConcreteElementB` 是具体元素类。`ObjectStructure` 是对象结构类,包含了一个元素的集合,可以接受访问者的访问。在 `main` 函数中,我们创建了一个具体的访问者和一个对象结构,然后向对象结构中添加了两个具体元素,最后让访问者访问对象结构。 

#include <iostream>
#include <vector>// 前置声明,防止循环引用
class ConcreteElementB;// 抽象访问者类
class Visitor {public:virtual void visit(ConcreteElementB* element) = 0;
};// 具体访问者类
class ConcreteVisitor : public Visitor {public:void visit(ConcreteElementB* element) override {std::cout << "ConcreteVisitor is visiting ConcreteElementB" << std::endl;}
};// 抽象元素类
class Element {public:virtual void accept(Visitor* visitor) = 0;
};// 具体元素类A
class ConcreteElementA : public Element {public:void accept(Visitor* visitor) override {std::cout << "ConcreteElementA is accepting visitor" << std::endl;}
};// 具体元素类B
class ConcreteElementB : public Element {public:void accept(Visitor* visitor) override {visitor->visit(this);}
};// 对象结构类
class ObjectStructure {private:std::vector<Element*> elements;public:void addElement(Element* element) {elements.push_back(element);}void accept(Visitor* visitor) {for (Element* element : elements) {element->accept(visitor);}}
};int main() {ConcreteVisitor visitor;ObjectStructure objectStructure;ConcreteElementA elementA;ConcreteElementB elementB;objectStructure.addElement(&elementA);objectStructure.addElement(&elementB);objectStructure.accept(&visitor);return 0;
}

3、Java实现

`Visitor` 是抽象访问者类,`ConcreteVisitor` 是具体访问者类,`Element` 是抽象元素类,`ConcreteElementA` 和 `ConcreteElementB` 是具体元素类。`ObjectStructure` 是对象结构类,包含了一个元素的集合,可以接受访问者的访问。在 `main` 方法中,我们创建了一个具体的访问者和一个对象结构,向对象结构中添加了两个具体元素,并让访问者访问对象结构。 

package behavioralpattern.visitor;import java.util.ArrayList;
import java.util.List;// 抽象访问者类
interface Visitor {void visit(ConcreteElementB element);
}// 具体访问者类
class ConcreteVisitor implements Visitor {@Overridepublic void visit(ConcreteElementB element) {System.out.println("ConcreteVisitor is visiting ConcreteElementB");}
}// 抽象元素类
interface Element {void accept(Visitor visitor);
}// 具体元素类A
class ConcreteElementA implements Element {@Overridepublic void accept(Visitor visitor) {System.out.println("ConcreteElementA is accepting visitor");}
}// 具体元素类B
class ConcreteElementB implements Element {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}
}// 对象结构类
class ObjectStructure {private List<Element> elements = new ArrayList<>();public void addElement(Element element) {elements.add(element);}public void accept(Visitor visitor) {for (Element element : elements) {element.accept(visitor);}}
}public class VisitorDemo {public static void main(String[] args) {ConcreteVisitor visitor = new ConcreteVisitor();ObjectStructure objectStructure = new ObjectStructure();ConcreteElementA elementA = new ConcreteElementA();ConcreteElementB elementB = new ConcreteElementB();objectStructure.addElement(elementA);objectStructure.addElement(elementB);objectStructure.accept(visitor);}
}
http://www.ds6.com.cn/news/81558.html

相关文章:

  • 企业网络管理 网站开发与运营链接生成器在线制作
  • 怎样给网站做 站内搜索江西省水文监测中心
  • 网站开发费用鉴定百度文库官网登录入口
  • 佛山网络优化推广公司天津seo培训机构
  • 网站维护服务百度竞价排名推广
  • 可以用css3做响应式网站吗软文推广平台排名
  • 上海商城网站建设网站平台有哪些
  • 有什么网上做c 的网站百度app下载最新版
  • 首先确定网站建设的功能定位整站优化代理
  • 政务网站建设工作计划结尾海外域名
  • 绍兴网站建设公司今日新闻摘抄十条
  • 男女一夜做受视频最新网站seo站长网
  • 网站开发网站制作网站营销方案模板
  • 响应式网站方案站长之家域名查询排行
  • nas搭建网站专业网站推广软件
  • 平度推广网站建设seo网络推广员招聘
  • ASP网站开发技术期末考试凡科建站客服电话
  • 天蝎网站建设seo关键词排名点击工具
  • 找网络公司做网站传媒公司
  • 网站免费域名申请有哪些网络推广平台
  • 山东企业网站备案沧州网站建设公司
  • 成品短视频app的优势抖音seo什么意思
  • 中山电商网站制作站长工具怎么关掉
  • 怎么利用网站做兼职引流推广的句子
  • 常州网站建设软件搜索指数在线查询
  • 海南澄迈网站建设兰州网站seo服务
  • 零基础学习网站开发优化大师最新版下载
  • 网络培训ppt长沙网站seo收费
  • 58网页版登录打开数字营销服务商seo
  • 制作网站的步骤百度seo排名帝搜软件