一、需求说明
完成测评系统需求
需求说明:将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价有不同的种类,如成功、失败等)
二、传统方案
1、传统实现
抽象一个父类 Person,下面有其具体的多个实现类,然后根据不同评价给出不同的结果。
2、传统方式的问题分析
① 如果系统比较小,还是可以的,但是考虑系统增加越来越多新的功能时,对代码改动比较大,违反了 OCP 原则,不利于维护;
② 扩展性不好,比如增加了新的人员类型,或者管理方法,都不好做;
三、访问者模式
1、访问者模式基本介绍
(1)访问者模式(visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
(2)主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题;
(3)访问者模式的基本工作原理是:在被访问的类里面加一个对外提供接待访问者的接口;
(4)访问者模式主要应用场景是:需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作 "污染"这些对象的类,可以选用访问者模式解决;
2、访问者模式的原理类图
对原理类图的说明——即访问者模式的角色及职责
(1)Visitor 是抽象访问者,为该对象结构中的 ConcreteElement 的每一个类声明一个 visitor 操作;该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色,这样访问者就可以通过该元素角色的特定接口直接访问它。
(2)ConcreteVisitor :是一个具体的访问者,实现visitor,每个有visitor声明的操作,是每个操作实现的部分。
(3)ObjectStructure 结构对象角色,这是使用访问者模式必备的角色。它具备以下特性:能枚举它的元素;可以提供一个高层接口以允许访问者访问它的元素;如有需要,可以设计成一个复合对象或者一个聚集(如一个列表或无序集合)。
(4)Element 定义一个 accept 方法,接收一个访问者(Visitor)对象作为参数;
(5)ConcreteElement:为具体元素,实现了抽象元素(Element)所定义的接受操作接口;