2011-04-01 52 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

相關問題