2012-12-05 131 views
0

我正在研究一個具有特定API的bespoken框架,現在我正在對它進行重新分解。如何在Java中實現類似於before_filter的方法?

一個我要解決的問題是建立像做法路由重定向查詢基於查詢和其他屬性的深度不同的班級。 以下是方法:

class Blah { 
public Object query1(){...} 
public Object query2(){...} 
} 

,我必須將它更改爲類似

class Blah implements BeforeFilter{ 
@Override 
protected void filter() 
{ 
//decide to call which query method 
//then redirect the request to query 
} 
public Object query1(){...} 
public Object query2(){...} 
} 

一個以上的想法做的非常傳統的方式是添加一個每個查詢的if/else裏面()方法決定走還是不走。

說實話,我不喜歡這種方法。這就是爲什麼我在尋找更優雅的東西。

P.S:這樣做的原因是不改變公共API。我已經實現了代理設計模式,但是會改變一些API。

+1

我正在閱讀Joshua Kerievsky的「Refactoring to Patterns」。在你處理你的項目之前,這是值得一看的。 – rajah9

回答

2

這對我來說聽起來像Chain-of-Responsibility這完全是一種「類似路線」的方法,過濾器或鏈元素符合一個通用接口,並且您以類似於鏈接列表的不同方式組裝它們。查詢/請求被傳遞給第一個鏈元素,並將請求傳遞給其「下一個」鏈元素,依此類推。每個鏈元素或篩選器決定是否對請求/ SQL執行某些操作等。

這樣您就可以使用過濾機制,其中每個篩選器(或鏈元素)與其他篩選器(或鏈元素)分離,並且不需要if-然後 - 其他階梯。

相關問題