2011-04-01 63 views
0

我有3个对象:对象实例能够知道彼此的当前状态吗?

  • 分析器
  • ParserState - 跟踪状态
  • ParserDefinitions的当前状态和转变的状态机 - 它从一个JSON文件中读取并提供一个给定状态的正则表达式,以及支配如何解析器工作

ParserState和ParserDefinitions是分析器的两个子类(?),并定义为分析器:: ParserState和分析器:: ParserDefinitions一些其他规则。如果ParserState对象可以访问ParserDefinitions的当前实例,反之亦然,那将是非常好的。这是可能的,还是它意味着他们应该被合并到一个班级中?

顺便说一句,我使用的Ruby,所以如果他们之间可能共享实例信息是可能的,如果可以使用Ruby代码将是很好的。

回答

1
  1. 那些不是子类,它们只是在类下命名空间。这不提供类对象之间的联系。

  2. 对象A访问对象B的状态的方式是调用对象B上的方法并查看返回值。看来这里唯一的问题是如何让对象A知道对象B.

  3. 你已经大写了这些名称,好像它们是模块或类,但你似乎将它们称为实例。这些单例对象或(例如)Parser实例是否创建了ParserStartParserDefinitions实例?假设是后者的话:

    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 
    

    鉴于上述情况,其中每个“孩子”对象知道它的“父”和父存取暴露给孩子,所有对象都可以互相交谈。

+0

非常感谢。 – 2011-04-01 15:41:52

相关问题