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

jsp网站开发 开题依据设计一个企业网站大概多少钱

jsp网站开发 开题依据,设计一个企业网站大概多少钱,重庆网站建设找珊瑚云,wordpress进入站点深入理解设计模式之访问者模式(Visitor Pattern) 一、什么是访问者模式? 访问者模式(Visitor Pattern)是一种行为型设计模式。它的主要作用是将数据结构与数据操作分离,使得在不改变数据结构的前提下&…

深入理解设计模式之访问者模式(Visitor Pattern)

一、什么是访问者模式?

访问者模式(Visitor Pattern)是一种行为型设计模式。它的主要作用是将数据结构与数据操作分离,使得在不改变数据结构的前提下,能够为其添加新的操作。

简单来说,访问者模式允许你在不修改对象结构的情况下,定义作用于这些对象的新操作。它适用于数据结构相对稳定,但经常需要对结构中的元素进行不同操作的场景。

二、访问者模式的结构

访问者模式主要包含以下角色:

  1. Visitor(访问者):为每一个具体元素声明一个访问操作接口。
  2. ConcreteVisitor(具体访问者):实现每个元素访问操作。
  3. Element(元素):定义一个接受访问者的方法(accept)。
  4. ConcreteElement(具体元素):实现accept方法,通常会调用访问者的visit方法。
  5. ObjectStructure(对象结构):可以遍历元素,并让访问者访问每一个元素。

三、访问者模式的优缺点

优点

  • 符合单一职责原则:将数据结构和数据操作分离。
  • 扩展性好:增加新的操作很方便,只需增加新的访问者即可。
  • 灵活性高:可以对一组对象进行不同的操作,而不改变对象本身。

缺点

  • 元素对象变更困难:如果元素对象结构经常变化,则需要频繁修改所有访问者。
  • 破坏封装:访问者模式要求访问元素的内部细节,可能会破坏元素的封装性。

四、典型应用场景

  • 对一个对象结构中的对象进行很多不同且不相关的操作。
  • 需要对对象结构中的对象进行新的操作,但不希望修改这些对象的类。

五、Java实现示例

1. 元素接口和具体元素

// 元素接口
public interface Element {void accept(Visitor visitor);
}// 具体元素A
public class ConcreteElementA implements Element {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}public void operationA() {System.out.println("ConcreteElementA operationA");}
}// 具体元素B
public class ConcreteElementB implements Element {@Overridepublic void accept(Visitor visitor) {visitor.visit(this);}public void operationB() {System.out.println("ConcreteElementB operationB");}
}

2. 访问者接口和具体访问者

// 访问者接口
public interface Visitor {void visit(ConcreteElementA elementA);void visit(ConcreteElementB elementB);
}// 具体访问者1
public class ConcreteVisitor1 implements Visitor {@Overridepublic void visit(ConcreteElementA elementA) {System.out.println("ConcreteVisitor1 访问了 ConcreteElementA");elementA.operationA();}@Overridepublic void visit(ConcreteElementB elementB) {System.out.println("ConcreteVisitor1 访问了 ConcreteElementB");elementB.operationB();}
}// 具体访问者2
public class ConcreteVisitor2 implements Visitor {@Overridepublic void visit(ConcreteElementA elementA) {System.out.println("ConcreteVisitor2 访问了 ConcreteElementA");}@Overridepublic void visit(ConcreteElementB elementB) {System.out.println("ConcreteVisitor2 访问了 ConcreteElementB");}
}

3. 对象结构

import java.util.ArrayList;
import java.util.List;public 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);}}
}

4. 客户端测试

public class Client {public static void main(String[] args) {ObjectStructure objectStructure = new ObjectStructure();objectStructure.addElement(new ConcreteElementA());objectStructure.addElement(new ConcreteElementB());Visitor visitor1 = new ConcreteVisitor1();Visitor visitor2 = new ConcreteVisitor2();System.out.println("使用访问者1:");objectStructure.accept(visitor1);System.out.println("\n使用访问者2:");objectStructure.accept(visitor2);}
}

5. 输出结果

使用访问者1:
ConcreteVisitor1 访问了 ConcreteElementA
ConcreteElementA operationA
ConcreteVisitor1 访问了 ConcreteElementB
ConcreteElementB operationB使用访问者2:
ConcreteVisitor2 访问了 ConcreteElementA
ConcreteVisitor2 访问了 ConcreteElementB

六、总结

访问者模式是一种非常实用的设计模式,尤其适用于“数据结构稳定,操作多变”的场景。它让你可以在不改变数据结构的前提下,灵活地为结构中的元素添加新的操作。但如果数据结构本身经常变化,则不适合使用访问者模式。


如需源码或有其他设计模式问题,欢迎留言交流!

http://www.dtcms.com/a/427448.html

相关文章:

  • 计算机网络---应用层
  • 营销网站的例子公司软件定制开发
  • SpringBoot3+WebSocket+Vue3+TypeScript实现简易在线聊天室(附完整源码参考)
  • 农作物空间分布数据集整理
  • C# UDP 服务端与客户端2.0
  • Gartner发布威胁情报的演变趋势:成为统一的网络风险情报,更加主动、协作和以行动为中心,以应对不断演变的全球网络威胁
  • 建站快车打电话安装wordpress的目录改变了
  • Spring Boot 2.5集成Elasticsearch(亲测)
  • Eclipse 快速修复
  • 赣州专业网站推广多少钱专门做任务的网站6
  • 如何快速切换网络配置?高效实现IP、MAC、主机名一体化管理
  • Mosquitto 架构分析:解读 mosquitto.c 的核心作用与执行流程
  • 单克隆抗体的核心概念
  • Java 并发锁实战手册:各类锁的特性、适用场景与选择方法论
  • 从化商城网站建设wordpress主题制作全过程
  • 传统网站架构 和 现代云服务 的区别简要分析
  • numpy -- 字符串函数 add()与multiply()
  • 使用Polars和PyTorch完成药物发现
  • 利津网站定制网络游戏投诉平台
  • 网站建设询价做网站必须网站备案
  • 跛脚就被辞退,道歉有用还要制度干什么?
  • 在windows 的子系统Ubuntu部署qanything-v2
  • AudioNotes:当FunASR遇见Qwen2,音视频转笔记的技术革命
  • 蛋白质结构预测:从AlphaFold到未来的计算生物学革命
  • 地区性中介类网站建设做网站的电脑需要什么配置
  • 4-6〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸文件上传漏洞-A
  • 《五年级上册语文1-8单元习作详解》+五年级语文作文指导/各单元提纲/写作技巧+完整电子版可下载打印
  • 第二届管理与智能社会发展国际学术会议(MISD 2026)
  • SEO描述字数计算工具
  • 做网站找模板苏州市城市建设局网站