我遇到了问题而且我无法找到最佳方法。 一位同事推荐了访客模式,但我不确定我是否可以使用访客进行访问。即使可以做到,如果我使用这种方法,也存在一些关于清晰度的严重问题。
我正在尝试序列化/反序列化设置,并发现我需要将相同的辅助方法添加到许多类(坏)。我更愿意将这些帮助程序从我正在放入的类中移出(它应该没有处理序列化/反序列化的代码但不确定如何将其分解)并进入集中点。
目前我正在尝试获取/设置父菜单类中包含的对象(按钮,其他菜单组件......)的参数。我实际上并不希望这些父类有辅助方法(因为它导致跨父类的代码重复,并且因为父类不应该“关心”或“知道”这些序列化/反序列化细节)
最简单的方法(当然)是采用带有“void *”指针的集中式方法。这种方法很容易阅读,但(由于“无效*”)有点脏。 “void *”将是我需要处理的每个父(菜单)类的引用。
鉴于我有很多东西需要我来获取参数(我只能通过n个父菜单类访问它们),参数列表可以不同......我真的可以使用Visitor这个?这是正确使用的模式吗?
答案 0 :(得分:1)
访客绝对是要走的路。使用Visitor,您可以扩展类的功能,而无需修改它。 “访客”这个词显然是用词不当而且它与模式无关,事实上它是一个非常强大的模式,因为它允许你从外面扩展课程。
见When should I use the Visitor Design Pattern?
答案 1 :(得分:0)
听起来像访问者符合问题描述,但它可能是一个实施的熊。
假设GUIElement是您想要序列化的对象层次结构的一部分,Manager会计算如何遍历序列化顺序的那些元素,并且Visitor类执行序列化的工作,这里我将看到它的动态基础在你的描述:
图表创建here。