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

网站尾部wordpress 收费

网站尾部,wordpress 收费,大连装修公司排名榜,retweet主题 wordpress文章目录 一.什么是访问者模式#xff1f;二.访问者模式的结构三.访问者模式的应用场景四.访问者模式的优缺点五.访问者模式的C实现六.访问者模式的JAVA实现七.代码解释八.总结 类图#xff1a; 访问者设计模式类图 一.什么是访问者模式#xff1f; 访问者模式#xff08;… 文章目录 一.什么是访问者模式二.访问者模式的结构三.访问者模式的应用场景四.访问者模式的优缺点五.访问者模式的C实现六.访问者模式的JAVA实现七.代码解释八.总结 类图 访问者设计模式类图 一.什么是访问者模式 访问者模式Visitor Pattern是一种行为型设计模式允许在不更改元素类的情况下为对象结构中的元素增加新的操作。访问者模式通过将操作从元素类中抽离出来实现操作的扩展。  在访问者模式中核心思想是将数据结构和操作分开数据结构负责提供必要的接口而具体的操作逻辑由访问者实现。 二.访问者模式的结构 Visitor访问者接口声明一组访问方法每个方法对应一种具体的元素类型。ConcreteVisitor具体访问者实现访问者接口中声明的操作对不同的元素提供不同的处理。Element元素接口定义一个Accept方法用于接收访问者对象。ConcreteElement具体元素实现元素接口并在Accept方法中调用访问者的相应方法。ObjectStructure对象结构提供元素的容器负责存储和遍历元素。 三.访问者模式的应用场景 数据结构稳定操作逻辑需要频繁变化例如编译器中的语法树遍历。需要对一组不相关的类执行操作如不同形状的图形对象圆形、矩形等。需要集中管理行为而不想污染元素类。 四.访问者模式的优缺点 优点 增加新的操作很方便只需新增一个具体访问者类。遵循单一职责原则将操作与元素本身解耦。 缺点 增加新的元素类型需要修改所有访问者违背了开闭原则。对象结构不容易扩展。 五.访问者模式的C实现 #include iostream #include vector #include memory// 前置声明避免循环引用 class ConcreteElementA; class ConcreteElementB; class Visitor;// 访问者接口Visitor class Visitor { public:virtual void visitConcreteElementA(ConcreteElementA element) 0;virtual void visitConcreteElementB(ConcreteElementB element) 0;virtual ~Visitor() default; };// 元素接口Element class Element { public:virtual void accept(std::shared_ptrVisitor visitor) 0;virtual ~Element() default; };// 具体元素 AConcreteElementA class ConcreteElementA : public Element { public:void accept(std::shared_ptrVisitor visitor) override {visitor-visitConcreteElementA(*this);}void operationA() {std::cout ConcreteElementA specific operation.\n;} };// 具体元素 BConcreteElementB class ConcreteElementB : public Element { public:void accept(std::shared_ptrVisitor visitor) override {visitor-visitConcreteElementB(*this);}void operationB() {std::cout ConcreteElementB specific operation.\n;} };// 具体访问者 1ConcreteVisitor1 class ConcreteVisitor1 : public Visitor { public:void visitConcreteElementA(ConcreteElementA element) override {std::cout ConcreteVisitor1 visiting ConcreteElementA.\n;element.operationA();}void visitConcreteElementB(ConcreteElementB element) override {std::cout ConcreteVisitor1 visiting ConcreteElementB.\n;element.operationB();} };// 具体访问者 2ConcreteVisitor2 class ConcreteVisitor2 : public Visitor { public:void visitConcreteElementA(ConcreteElementA element) override {std::cout ConcreteVisitor2 visiting ConcreteElementA.\n;element.operationA();}void visitConcreteElementB(ConcreteElementB element) override {std::cout ConcreteVisitor2 visiting ConcreteElementB.\n;element.operationB();} };// 对象结构ObjectStructure class ObjectStructure { private:std::vectorstd::shared_ptrElement elements;public:void addElement(std::shared_ptrElement element) {elements.push_back(element);}void accept(std::shared_ptrVisitor visitor) {for (auto element : elements) {element-accept(visitor);}} };// 测试代码 int main() {// 创建对象结构ObjectStructure objectStructure;// 添加元素objectStructure.addElement(std::make_sharedConcreteElementA());objectStructure.addElement(std::make_sharedConcreteElementB());// 创建访问者 1 并访问std::shared_ptrVisitor visitor1 std::make_sharedConcreteVisitor1();std::cout Using ConcreteVisitor1:\n;objectStructure.accept(visitor1);// 创建访问者 2 并访问std::shared_ptrVisitor visitor2 std::make_sharedConcreteVisitor2();std::cout \nUsing ConcreteVisitor2:\n;objectStructure.accept(visitor2);return 0; }六.访问者模式的JAVA实现 // 抽象访问者 interface Visitor {void VisitConcreteElementA(ConcreteElementA elementA);void VisitConcreteElementB(ConcreteElementB elementB); }// 具体访问者1 class ConcreteVisitor1 implements Visitor {Overridepublic void VisitConcreteElementA(ConcreteElementA elementA) {System.out.println(ConcreteVisitor1 visiting ConcreteElementA);}Overridepublic void VisitConcreteElementB(ConcreteElementB elementB) {System.out.println(ConcreteVisitor1 visiting ConcreteElementB);} }// 具体访问者2 class ConcreteVisitor2 implements Visitor {Overridepublic void VisitConcreteElementA(ConcreteElementA elementA) {System.out.println(ConcreteVisitor2 visiting ConcreteElementA);}Overridepublic void VisitConcreteElementB(ConcreteElementB elementB) {System.out.println(ConcreteVisitor2 visiting ConcreteElementB);} }// 抽象元素 abstract class Element {public abstract void Accept(Visitor visitor); }// 具体元素A class ConcreteElementA extends Element {Overridepublic void Accept(Visitor visitor) {visitor.VisitConcreteElementA(this);}public void OperationA() {System.out.println(ConcreteElementA specific operation.);} }// 具体元素B class ConcreteElementB extends Element {Overridepublic void Accept(Visitor visitor) {visitor.VisitConcreteElementB(this);}public void OperationB() {System.out.println(ConcreteElementB specific operation.);} }// 对象结构 class ObjectStructure {private final ListElement elements new ArrayList();public void Add(Element element) {elements.add(element);}public void Accept(Visitor visitor) {for (Element element : elements) {element.Accept(visitor);}} }// 客户端代码 public class VisitorPatternDemo {public static void main(String[] args) {// 创建对象结构ObjectStructure structure new ObjectStructure();// 添加具体元素structure.Add(new ConcreteElementA());structure.Add(new ConcreteElementB());// 创建并使用访问者1ConcreteVisitor1 visitor1 new ConcreteVisitor1();structure.Accept(visitor1);// 创建并使用访问者2ConcreteVisitor2 visitor2 new ConcreteVisitor2();structure.Accept(visitor2);} }七.代码解释 Element 接口和 ConcreteElement Element接口定义了一个accept方法具体元素类需要实现该方法并在其中调用访问者的相应方法。 Visitor 接口和 ConcreteVisitor Visitor接口声明了针对每种具体元素的访问方法。ConcreteVisitor1和ConcreteVisitor2实现了Visitor接口并定义了对ConcreteElementA和ConcreteElementB的具体操作。 ObjectStructure 类 ObjectStructure维护了一个元素集合并提供accept方法用于将访问者传递给集合中的每个元素。 测试代码 创建了一个对象结构并添加了两种具体元素。使用两个不同的访问者访问元素集合展示了访问者模式的扩展性。 八.总结 访问者模式是一种将操作和数据结构分离的强大工具。当需要频繁添加新的操作或行为时它提供了扩展性良好的解决方案。通过访问者模式可以大幅简化复杂操作的管理提升代码的可读性和维护性。
http://www.dnsts.com.cn/news/282060.html

相关文章:

  • 鹿班设计网站官网生物科技公司网站模板下载
  • 海口哪里做网站可视化网站后台
  • 宜城市城乡建设局网站网站首页有哪些内容
  • 网站建设服务的广告阿里云企业网站怎么建设
  • 网站建设的后台登录医院网上预约
  • 销售部网站建设费阿里巴巴运营免费教程
  • 人工做流量的网站百度关键词工具入口
  • 电子商务网站建设与维护试卷郑州一建拖欠工资
  • 导航网站优化wordpress phpmyadmin插件
  • php做的网站打包成exe江苏建设集团有限公司
  • dw制作网站教程辽宁建设考试培训网站
  • 网站开发空间小国内wordpress大神
  • 网站建设多少钱网页设计与制作心得体会100字
  • 外包活加工官方网站公司网站设计与实现的项目建议书
  • 什么是权重高的网站网站建设北京公司
  • 个人网站可以注册com域名吗河南做网站联系电话
  • discuz 网站搬家生成二维码的小程序
  • 江西省建设厅官方网站做网站用的幻灯片大小
  • 网站建设征求意见稿安徽旅游必去十大景点
  • 南昌找店面上什么网站国内做的好的游艇网站
  • 网站建设的布局网页版梦幻西游辅助工具
  • 用vs做网站表格向上居中网站制作哪家好又便宜
  • 伊川县住房和城乡建设厅网站网站编辑是做什么
  • 青海营销型网站建设企业网站颜色选择
  • 网站开发作业图片自己做网站 什么软件
  • 青海网站设计企业太原网站优化
  • 济南网站制作多少钱一个谷歌seo的算法
  • 大连建站方案wordpress如何导出数据字典
  • 专门做投票的网站有哪些中国建设人才信息网查
  • 网站虚拟主机里的内容强制删除洞泾网站建设