《图解设计模式》 第五部分 访问数据结构

news/2024/11/5 10:19:05/文章来源:https://www.cnblogs.com/dasuxd/p/18527319

第十三章 Visotor 模式

public class file extends entry{/* 省略 */puhblic void accept(Visitor v){v.visit(this);}
}public class Main{public static void main(String args){Directory rootdir = new Dirctory("root");/* 省略 */rootdir.accept(new ListVisitor());}
}

双重分发

这里的 Element accept(Visitory) 和 Visitor的 visit(Element) 他们是相反的关系。前者接受,后者访问。
这种消息分发方式一般被称为 双重分发(double dispatch)

为什么弄这么复杂?

Vistor 模式的目的是将处理的数据从数据结构中分离出来。这里的 ListVisitor 是遍历,我们可能也要做其他事情,比如 文件批量改名之类。所有的行为在 Visitor 的子类中实现就好。

开闭原则(The Open-Closed Principle, OCP)

对扩展是开放的
对修改是关闭的

第14章 Chain of Responsibility 模式

public class Main{public static void main(String[] args){Support alice = new NoSupport("Alice");Support bob = new LimitSupport("Bob", 100);Support charlie = new SpecialSupport("Charlie", 429);Support diana = new LimitSupport("Diana", 200);Support elmo = new OddSupport("Elmo");Support fred = new LimitSupport("Fred", 300);//设置处理链alice.setNext(bob).setNext(charlie).setNext(diana).setNext(elmo).setNext(fred);for(int i = 0; i < 500; i += 33){alice.support(new Trouble(i));}}
}public abstract class Support{private Stirntg name;private Support next;public Support(String name){this.name = name;}public Support setNext(Support next){this.next = next;return next;}public final void support(Trouble trouble){if(resolve(trouble)){done(trouble);}else if(next != null){next.support(trouble);}else{fail(trouble);}}protected abstract boolean resolve(Trouble trouble);protected void done(Trouble trouble){System.out.println(trouble + " is resolved by " + this + ".");}protected void fail(Trouble trouble){System.out.println(trouble + " cannot be resolved.");}
}public class LimitSupport extends Support{private int limit;public LimitSupport(String name, int limit){super(name);this.limit = limit;}protected boolean resolve(Trouble trouble){if(trouble.getNumber() < limit){return true;}else{return false;}}
}

Windows 系统中经常使用这个模式。

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

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

相关文章

Harbor双主复制高可用部署

环境信息:主机名称 IP 备注harbor01 192.168.61.56 harbor1服务器harbor02 192.168.61.57 harbor2服务器192.168.61.59 Nginx代理192.168.61.56/57 两个节点分别部署docker-ce ,docker-compose,harbor-offline-installer-v2.9.1.tgz部署docker-ce docker-composewget -P /etc/…

经济下行,当下企业如何破局?

禅道前几天刚发布的企业决策分析解决方案2.0中,增加了适合IPD市场分析的3C战略三角模型。我想借着此次发布,和大家分享一下企业如何落地IPD,让企业的真金白银不浪费。大家好,我是陈哥,今天想和大家聊聊企业如何落地IPD~ 华为实施IPD的巨大成功激励了众多的中国企业,很多企…

强化学习理论-第1课-基础概念

1. state:状态,可以是机器人的位置,速度,加速度等2. action:对于每一个状态,可能的动作3. state transition:状态转移3.1 state transition probability:4. policy:告诉agent在这个状态应该采用哪个action

强!34.1K star! 再见Postman,新一代API测试利器,功能强大、颜值爆表!

1、引言 在当今的互联网时代,API(应用程序编程接口)已经成为连接不同软件系统的桥梁。作为一名开发者,掌握API测试技能至关重要。市面上的API测试工具琳琅满目,今天我们要介绍的是一款开源、跨平台的API测试工具——Insomnia。 2、Insomnia介绍 Insomnia是一款功能丰富、易…

kubernetes删除ns异常状态为:Terminating

用kubernetes-API删除 1、首先,获取要删除 NameSpace 的 JSON 文件:替换其中的 <terminating-namespace> 为实际 namespace kubectl get namespace <terminating-namespace> -o json >tmp.json[root@master01 ~]# kubectl get namespace kuboard -o json >…

Veritas InfoScale 8.0 (Unix, Linux, Windows) 下载 - 高可用性和灾难恢复解决方案

Veritas InfoScale 8.0 (Unix, Linux, Windows) 下载 - 高可用性和灾难恢复解决方案Veritas InfoScale 8.0 (Unix, Linux, Windows) - 高可用性和灾难恢复解决方案 打造云和本地应用程序的高可用性和出色性能 请访问原文链接:Veritas InfoScale 8.0 (Unix, Linux, Windows) - …

记一次装机记录

跑个题,放个装机的记录。 趁双十一装了一台台式放实验室用。起初有以下几个想法:内存 32 GB 或更多 CPU 性能足够强,能够满足多开软件的需求,且响应速度快 应当带有无线网卡(主板自带或自行加装 PCIe 网卡),用于连接蓝牙鼠标键盘耳机和临时连接 WiFi。 可能在未来购入一…

SyncOOD:增加OOD目标检测鲁棒性,自动化数据助您一臂之力 | ECCV24

本文是对公开论文的核心提炼,而非直接翻译,旨在进行学术交流。如有任何侵权问题,请及时联系号主以便删除。 来源:晓飞的算法工程笔记 公众号,转载请注明出处论文: Can OOD Object Detectors Learn from Foundation Models?论文地址:https://arxiv.org/abs/2409.05162 论…