知识卡片
把易变的展示逻辑从元素类中抽离出来
内容
员工报表若把易变的展示逻辑焊死在Employee类里,格式调整就要改动员工类,违反开闭原则。 解法:报表逻辑搬进独立Visitor类,Employee只保留accept(visitor),内部调用 visitor.visit(this)交给访问者处理,新增报表格式只需新增Visitor实现类。发散:这揭示 访问者模式的核心意图——把数据结构上易变的操作剥离出去,数据结构保持稳定,操作可自由 扩展。
参考来源
- 位置:《设计模式之禅(第2版)》第25章《访问者模式》(源文件:_epub-src/text/part0114.html)
- 结论依据:原文分析大老板只关心部门经理报表、不同老板关心内容不同的需求,指出"这个报表会修改:数据的修改以及报表的展现修改……需要在设计时考虑通过扩展来避开未来需求变更而引起的代码修改风险",随后把report方法从Employee抽离到独立的Visitor类。
- 原始内容:多个大老板的"嗜好"是不同的……这个报表会修改:数据的修改以及报表的展现修改,按照开闭原则,项目分析的时候已经考虑到这些可能引起变更的因素……我们把方法report提取到另外一个类Visitor中来实现。