今天來談一下目前的代碼中是如何使用組合模式的创橄。
以下是matcher部分的類圖和組合模式的類圖:
Component是組合模式中的接口库北,它應(yīng)該包含所有公共的行為呈野,有這樣一個接口旗闽,方便訪問和管理繼承這個接口的組件遵馆。
Composite是子部件京腥,composite后面還可以有葉子節(jié)點赦肃,在composite中可以實現(xiàn)子部件應(yīng)該有的行為。
Leaf是葉子節(jié)點,葉子節(jié)點是沒有子節(jié)點的他宛。
根據(jù)matcher的類圖對比組合模式可以發(fā)現(xiàn)船侧,RequestMatcher就是Component,在RequestMatcher中我們有match方法厅各,AndRequestMatcher镜撩、OrRequestMatcher是葉子節(jié)點,他們分別實現(xiàn)了自己的match方法队塘,AbstractContentMatcher相當于Composite組件袁梗,這個類中有自己的doMatch方法是別的類不需要擁有的。再往下的三個類:ContentMatcher憔古、UriRequestMatcher遮怜、XPathRequestMatcher在組合模式的這棵樹中,都是葉子節(jié)點鸿市。均繼承了AbstractContentMatcher锯梁,實現(xiàn)了doMatch方法。很標準的一個組合模式焰情。
組合模式的好處就是可以很清晰的表達出這幾個類的部分-整體的組織結(jié)構(gòu)陌凳,可以通過對這個組合整體進行統(tǒng)一操作,而忽略對單一的個體進行操作烙样。操作Component和Composite即可冯遂。