行为型设计模式.访问者模式
2020-12-08 本文已影响0人
双鱼子曰1987
一、概念
访问者模式是一种将数据存储结构和操作彼此分离的设计模式。
1.1、定义
将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。
363A49E9-0AA6-4073-A49B-D537F9D395AD.png
- Visitor,访问者类:模式核心类,提供访问某种数据的提供抽象接口。可以根据不同的操作算法派生出不同的ConcreteVisitor。
- Element,封装数据基类,可以根据需求派生出不同的数据存储类。
- ObjectStructure,数据的数据结构类,用于管理数据的存储、删除、访问入口操作。
1.2、解决的问题
-
解决的问题:软件开发中,常常将数据封装存储到一定的数据结构中,这些数据结构往往固定不会轻易的改动。但是需求迭代中,针对这些数据结构的操作和使用算法会随着需求迭代而变成算法。如果数据操作在同一个类中,那么每增加一种访问操作算法,就需要修改相关的类。
-
访问者模式的解决思路:将对数据的操作剥离到访问者类中。
二、模式的应用和优缺点
2.1、应用场景
- 实例:数组集合数据结构,提供多种访问方法。
2.2、优缺点
- 优点:
相对固定的数据结构 和 多变的操作 剥离开,数据类和操作类负责各自独立功能,符合单一原则。
同时具有扩展灵活的优点。
- 缺点:
- 元素类变更或者增加新的元素类,修改的成本大。
在访问者模式中,每增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了“开闭原则”。 - 具体元素
Element
需要对访问者Visitor
公布细节,这破坏封装性,不符合迪米特原则。 - 违反了依赖倒置原则,依赖了具体类,没有依赖抽象。
Visitor 访问 Element的数据字段的时候,需要依赖于具体某种类型的数据类,而不是依赖于抽象基类。
- 元素类变更或者增加新的元素类,修改的成本大。