大话设计模式——22.访问者模式(Visitor Pattern)

简介

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作

UML图

在这里插入图片描述

应用场景
  • 适用于数据结构相对稳定且算法易于变化的系统,该模式将数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化
  • 增加新的操作较容易

示例

  1. Visitor:
public abstract class Action {/*** 男人的结论** @param man*/public abstract void manConclusion(Man man);/*** 女人的结论** @param woman*/public abstract void womanConclusion(Woman woman);
}
public class Success extends Action {@Overridepublic void manConclusion(Man man) {System.out.println("背后有个强大的女人!");}@Overridepublic void womanConclusion(Woman woman) {System.out.println("个人素质优秀!");}
}
  1. Element:
public abstract class People {/*** 男女态度** @param visitor*/public abstract void accept(Action visitor);
}
public class Man extends People {@Overridepublic void accept(Action visitor) {visitor.manConclusion(this);}
}
public class Woman extends People {@Overridepublic void accept(Action visitor) {visitor.womanConclusion(this);}
}
  1. ObjectStructure:
public class ObjectStructure {private final List<People> peopleList = new ArrayList<>();/*** 添加** @param people*/public void add(People people) {peopleList.add(people);}/*** 删除** @param people*/public void remove(People people) {peopleList.remove(people);}/*** 结果展示*/public void display(Action visitor) {for (People p :peopleList) {p.accept(visitor);}}
}
  1. 运行
public class Main {public static void main(String[] args) {ObjectStructure objectStructure = new ObjectStructure();objectStructure.add(new Woman());objectStructure.add(new Man());Success success = new Success();objectStructure.display(success);}
}

在这里插入图片描述

总结

  • 优点

    • 满足开闭原则,新增操作只需新增访问类即可
  • 缺点

    • 增加新的数据结构会变得困难

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615417.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是面向对象思想?

面向对象不是一种技术&#xff0c;而是一种思想。它指导我们以什么形式组织代码&#xff0c;以什么思路解决问题。 面向对象编程&#xff0c;是一种通过对象方式&#xff0c;把现实世界映射到计算机世界的编程方法。 面向对象解决问题的思路&#xff1a;把构成问题的事物分解成…

【Java探索之旅】方法的概念 定义 执行流程 实参与形参的交互

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、方法的概念及定义1.1 方法的概念1.2 方法的定义 二、方法的调用执行过程2.1 执行流…

2024.4.12每日一题

今天上午参加了蓝桥杯&#xff0c;只会暴力&#xff0c;还需努力学习 LeetCode 找到冠军 || 题目链接&#xff1a;2924. 找到冠军 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。每支队伍也是 有向无环图…

Harmony背景图片铺满

在对页面&#xff0c;弹框设置背景时&#xff0c;需要放大全屏。 backgroundImageSize backgroundImageSize(value: SizeOptions | ImageSize) 设置组件背景图片的宽高。 卡片能力&#xff1a; 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 系统能力&am…

SpringMVC(一)【入门】

前言 学完了大数据基本组件&#xff0c;SpringMVC 也得了解了解&#xff0c;为的是之后 SpringBoot 能够快速掌握。SpringMVC 可能在大数据工作中用的不多&#xff0c;但是 SSM 毕竟是现在就业必知必会的东西了。SpringBoot 在数仓开发可能会经常用到&#xff0c;所以不废话学吧…

DCI-BOX 数据中心互联扩容设备

2U DCI-BOX是针对DCI数据互联开发的一款高性能、大容量DCI平台 恒通未来2U DCI-BOX 优势&#xff1a; 随着5G网络的演进&#xff0c;人们对大数据需求越来越旺盛&#xff0c;2U DCI-BOX是针对DCI数据互联开发的一款高性能、大容量DCI平台。 1. 单机箱最大容量6.4T,单100G功耗…

java中的线程通讯和线程池,Callable任务

线程通讯&#xff1a; 在多线程中&#xff0c;某个线程进入“等待状态”时&#xff0c;需要某个线程来唤醒 等待方法&#xff1a; wait()//无线等待 wait(long 毫秒)//计时等待 注意&#xff0c;调用wait方法&#xff0c;会自动释放掉锁资源 处于wait状态只能由其他线程唤醒 唤…

如何在宽松许可证下构建有竞争力的Milvus Cloud商业服务?

如何在宽松许可证下构建有竞争力的商业服务? 开源公司并不一定要修改许可证作为唯一的出路,不过其挑战在于找到开源与商业化之间的平衡。 以 Zilliz 为例,我们选择将开源向量数据库 Milvus 捐赠给 Linux 基金会。在过去四年的时间里,Milvus 已经在 GitHub 上获得了超过 …

uni-app的页面中使用uni-map-common的地址解析(地址转坐标)功能,一直报请求云函数出错

想在uni-app的页面中使用uni-map-common的地址解析&#xff08;地址转坐标&#xff09;功能&#xff0c;怎么一直报请求云函数出错。 不看控制台啊,弄错了控制台&#xff0c;就说怎么一直没有打印出消息。 所以开始换高德地图的&#xff0c;昨天申请了两个 一开始用的第二个web…

大话设计模式之桥接模式

桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与它的实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过提供一个桥接接口来实现这种分离&#xff0c;使得抽象部分和实现部分可以在运行时独立地进行修改。 桥接模式主要由两个部分组成&#xff1a;抽象部分…

ADB的基本语法及常用命令

学习网址 ADB命令的基本语法如下&#xff1a; adb [-d|-e|-s <serialNumber>] <command> 如果有多个设备/模拟器连接&#xff0c;则需要为命令指定目标设备。 参数及含义如下&#xff1a; 常用命令如下&#xff1a; 1. 启动ADB服务 adb start-server 2. 停止…

麦多馅饼开店流程及费用明细?

麦多馅饼作为一种深受人们喜爱的美食&#xff0c;在市场上拥有广泛的消费群体。近年来&#xff0c;越来越多的创业者将目光投向了麦多馅饼这一领域&#xff0c;希望通过加盟或自主经营的方式开设一家麦多馅饼店。本文将详细介绍麦多馅饼的开店流程以及相关的费用明细&#xff0…