java訪問者模式學習總結

      訪問者模式,自我感覺就相當於是從不同的方向去實現相同的問題,只不過使用訪問者模式後,和一般寫法導致的擴展能力正好相反。

      相當於將接口中原本應該存在的每一 個功能方法都變成了一個個的功能訪問者。

      一般繼承接口,實現所有接口方法:不同實現類的擴展容易,其中的方法擴展困難。

     訪問者模式:不同實現類擴展困難,其中的方法擴展容易。

    一般情況下我們都是定義好接口,以及接口需要實現的所有方法,然後方法的具體實現就交給不同的實現類去實現。這樣的話,新增不同

    的實現類非常容易,但是要擴展接口的方法就不是那麼容易了,因爲這樣需要將所有實現類都重新實現新的接口方法。

     如果我們目前面臨的情況是,我們的實現類一般情況下不需要變化擴展,但是裏面的方法可能需要經常變化,這樣,直接使用上面的實現

     模式就不太友好了。這時候,訪問 者模 式就閃亮登場了。

     首先,爲了好說明,我們先定義一個Person接口,有兩個實現類BoyPerson,GirlPerson。有一個訪問者接口Visitor。

     訪問者模式的思路:在person接口中我們只需要定義一個方法,用來接收不同的訪問者,然後將自身傳給訪問者。

                                         而我們在訪問者的接口中,定義一個重載方法,方法名都是visit,但 是參數是person具體的實現類,注意,所有的

                                         實現類都要用這個visit方法列舉一   遍,在這裏就是BoyPerson,GirlPerson參數的兩個重載方法。

     按理說,Person應該有自己的方法啊,例如:吃飯eat()方法,睡覺sleep()方法。但是,我們在Person中並沒有定義這兩個方法,我們

     要把這兩個方法分別定義成兩個訪問者, 分別是吃飯訪問者,睡覺訪問者。然後在吃飯訪問者中實現BoyPerson的吃飯功能和GrilPerson

     的吃飯功能,以及在睡覺訪問者中實現BoyPerson的睡覺功能和 GrilPerson的睡覺功能。

     就這樣,我們把原本應該定義的Person接口中的方法分別定義成了不同的訪問者,如果我們還要爲Person添加新的能力,只要新建對應

     功能的訪問者就可以了。導致 新增方法變得很容易,但是這樣,擴展不同的Person就變得困難了,因爲這樣要擴展黑人,白人等各種Person,

    我們就需要在所有的訪問者中都添加一遍黑人,白人等各種Person的visit實現。

   

      友情鏈接:http://www.runoob.com/design-pattern/visitor-pattern.html

    

       這只是本人看了訪問者模式的一點想法,如有不對的地方還請留言指正。

   


發佈了33 篇原創文章 · 獲贊 20 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章