我有3个对象:
ParserState和ParserDefinitions都是Parser的子类(?),定义为Parser :: ParserState和Parser :: ParserDefinitions。如果ParserState对象可以访问ParserDefinitions的当前实例,反之亦然,那将是很好的。这是可能的,还是暗示它们实际上应该合并为一个类?
顺便说一下,我正在使用Ruby,所以如果它们可能在它们之间共享实例信息,那么如果可以使用Ruby代码就会很棒。
答案 0 :(得分:1)
这些不是子类,它们只是在类下面命名空间。这不提供类对象之间的链接。
对象A访问对象B状态的方式是通过调用对象B上的方法并查看返回值。似乎这里唯一的问题是如何使对象A了解对象B.
您已将这些名称大写,就像它们是模块或类一样,但您似乎将它们称为实例。这些单例对象或(例如)Parser
实例是否同时创建了ParserStart
和ParserDefinitions
个实例?假设后者是这样的:
class Parser
attr_accessor :states, :defns
def initialize
self.states = ParserStates.new( self )
self.defns = ParserDefinitions.new( self )
end
end
class Parser::ParserStates
attr_accessor :parser
def initialize( parent_parser )
self.parser = parent_parser
end
def defns
parser.defns
end
end
class Parser::ParserDefinitions
attr_accessor :parser
def initialize( parent_parser )
self.parser = parent_parser
end
def states
parser.states
end
end
鉴于上述情况,每个“孩子”对象都知道其“父”,父母公开子女的访问者,所有对象都可以互相交谈。