![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
行为型模式
文章平均质量分 95
行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
zwj9367
树冠、微风、肩头的暴雨
展开
-
访问者模式(Visitor)
访问者是一种行为设计模式,它能将算法与其所作用的对象隔离开来。假如你的团队开发了一款能够使用巨型图像中地理信息的应用程序。图像中的每个节点既能代表复杂实体(例如一座城市), 也能代表更精细的对象(例如工业区和旅游景点等)。如果节点代表的真实对象之间存在公路,那么这些节点就会相互连接。在程序内部,每个节点的类型都由其所属的类来表示,每个特定的节点则是一个对象。一段时间后, 你接到了实现将图像导出到 XML 文件中的任务。这些工作最初看上去非常简单。原创 2023-11-22 11:21:25 · 50 阅读 · 0 评论 -
模板方法模式(Template Method)
模板方法是一种行为设计模式,它在超类中定义了一个算法的 框架,允许子类在不修改结构 的情况下重写算法的特定步骤。假如你正在开发一款分析公司文档的数据挖掘程序。用户需要向程序输入各种格式(PDF、DOC 或 CSV)的文档,程序则会试图从这些文件中抽取有意义的数据,并以统一的格式将其返回给用户。该程序的首个版本仅支持 DOC 文件。在接下来的一个版本中,程序能够支持 CSV 文件。一个月后,你“教会”了程序从 PDF 文件中抽取数据。一段时间后,你发现这三个类中包含许多相似代码。原创 2023-11-21 17:59:44 · 47 阅读 · 0 评论 -
策略模式(Strategy)
策略是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独 立的类中,以使算法的对象能够相互替换。你打算为游客们创建一款导游程序。该程序的核心功能是提供美观的地图,以帮助用户在任何城市中快速定位。用户期待的程序新功能是自动路线规划:他们希望输入地址后就能在地图上看到前往目的地的最快路线。程序的首个版本只能规划公路路线。驾车旅行的人们对此非常满意。但很显然,并非所有人都会在度假时开车。因此你在下次更新时添加了规划步行路线的功能。此后,你又添加了规划公共交通路线的功能。而这只是个开始。原创 2023-11-20 18:04:03 · 43 阅读 · 0 评论 -
状态模式(State)
状态是一种行为设计模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。状态模式与有限状态机的概念紧密相关。其主要思想是程序在任意时刻仅可处于几种有限的状态中。在任何一个特定状态中,程序的行为都不相同,且可瞬间从一个状态切换到另一个状态。不过,根据当前状态,程序可能会切换到另外一种状态,也可能会保持当前状态不变。这些数量有限且预先定义的状态切换规则被称为转移。你还可将该方法应用在对象上。原创 2023-11-17 17:33:32 · 66 阅读 · 0 评论 -
观察者模式(Observer)
观察者是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。假如你有两种类型的对象:“顾客”和“商店”。顾客对某个特定品牌的产品非常感兴趣(例如最新型号的 iPhone 手机),而该产品很快将会在商店里出售。一方面顾客可以每天来商店看看产品是否到货。但如果商品尚未到货时,绝大多数来到商店的顾客都会空手而归。另一方面,每次新产品到货时,商店可以向所有顾客发送邮件(可能会被视为垃圾邮件)。这样,部分顾客就无需反复前往商店了,但也可能会惹恼对新产品没有兴趣的其他顾客。原创 2023-11-15 15:38:57 · 29 阅读 · 0 评论 -
备忘录模式(Memento)
备忘录是一种行为设计模式,允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。假设你正在开发一款文字编辑器应用程序,除了简单的文字编辑功能外,编辑器中还要有设置文本格式和插入内嵌图片等功能。后来你决定让用户能撤销施加在文本上的任何操作。你选择采用最直接的方式来实现该功能:程序在执行任何操作前会记录所有的对象状态, 并将其保存下来。当用户此后需要撤销某个操作时,程序将从历史记录中获取最近的快照,然后使用它来恢复所有对象的状态。原创 2023-11-14 17:52:25 · 52 阅读 · 0 评论 -
中介者模式(Mediator)
中介者是一种行为设计模式,能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作。假如你有一个创建和修改客户资料的对话框,它由各种控件组成, 例如文本框(TextField)、复选框(Checkbox) 和按钮(Button)等。某些表单元素可能会直接进行互动。例如,选中“我有一只狗”复选框后可能会显示一个隐藏文本框用于输入狗狗的名字。另一个例子是提交按钮必须在保存数据前校验所有输入内容。原创 2023-11-10 18:50:52 · 69 阅读 · 1 评论 -
迭代器模式(Iterator)
迭代器是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。大部分集合使用简单列表存储元素。但有些集合还会使用栈、树、图和其他复杂的数据结构。无论集合的构成方式如何,它都必须提供某种访问元素的方式,便于其他代码使用其中的元素。集合应提供一种能够遍历元素的方式,且保证它不会周而复始地访问同一个元素。如果你的集合基于列表, 那么这项工作听上去仿佛很简单。但如何遍历复杂数据结构(例如树)中的元素呢?原创 2023-11-09 17:19:38 · 41 阅读 · 1 评论 -
命令模式(Command)
命令是一种行为设计模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。假如你正在开发一款新的文字编辑器,当前的任务是创建一个包含多个按钮的工具栏,并让每个按钮对应编译器的不同操作。你创建了一个「Button」类。它不仅用于生成工具栏上的按钮,还可用于生成各种对话框的通用按钮。尽管所有按钮看上去都很相似,但它们可以完成不同的操作(打开、保存、打印和应用等)。你会在哪里放置这些按钮的点击处理代码呢?原创 2023-11-08 16:50:18 · 51 阅读 · 1 评论 -
责任链模式(Chain of Responsibility)
责任链是一种行为设计模式,允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。假如你正在开发一个在线订购系统。你希望对系统访问进行限制,只允许认证用户创建订单。此外,拥有管理权限的用户也拥有所有订单的完全访问权限。简单规划后,你会意识到这些检查必须依次进行。只要接收到包含用户凭据的请求,应用程序就可尝试对进入系统的用户进行认证。但如果由于用户凭据不正确而导致认证失败,那就没有必要进行后续检查了。原创 2023-11-07 19:18:23 · 41 阅读 · 0 评论