我有一個A類,有一系列處理程序,例如public void handleEv1(),public void handleEv2()等 當一個事件發生時,類B中的另一個線程,調用A類的通信者處理程序(B類具有對A類觀察者可觀察類的引用)。 在A類的相應方法中處理事件時,A最終將事件引發至eventListener(不由我創建的類C)。 我的問題是:是否有一種模式可以用來將類A的處理方法從作爲事件監聽器的類中「隱藏」(不是由我來實現),並且只對類B「可見/可訪問」我執行)?Java /用於從第三方類隱藏方法的模式
我正在編輯我的原始問題。 ,有很多的方法和處理我所說的
public class Csystem()
{
private AListener listener;//implements an event listener (the class C in my question)
//some methods here
public void handleEventIncoming(Event e){
//Do some logic here
listener.raiseEvent(e);
}
public void handleEventOutgoing(Event e); etc
}
CSystem我有類Csystem是一個類,基本上是其他組件的其他開發者我的代碼的接口。其他一些開發人員將編寫他自己版本的AListener類(A類),並在他的代碼中使用Csystem。每當一個事件的某處發生(如網絡中的消息到達),B級將事件傳遞給CSystem
的事件處理程序public class Dispatch{
//This is class B
private CSystem s;
private void event_occured(Event e)
{
s.handleEventIncoming(e);
}
}
} 我的問題是,無論是類分(通過我實現)和類AListener 「看到」CSystem的相同界面。我希望實現AListener的開發人員能夠看到CSystem的不同視圖,並「看到」並且只能使用公開的方法。我不認爲看到某個人實際上不能使用的方法是一個好主意(處理程序只有調度員纔有意義)是否有一種模式可以實現這一點?
謝謝!
嗨, 你是指以下? 公共類B接口處理程序public void handleEv1(); public void handleEv1(); } etc } class A implements Handlers { public void handleEv1(); public void handleEv1(); etc } 但是這個設計仍然不是C仍然可以訪問的處理程序,因爲它們是公開的?或者我誤解你在說什麼? – akmer 2010-07-06 10:53:37
但是你的A向C發送了一個事件,C不知道A的任何內容,它在編寫A之前就被編譯了,C中沒有任何代碼能夠知道anA.myMethod()。 – djna 2010-07-06 11:12:20
感謝您的回覆。對我來說問題是以下(可能是我的想法是錯誤的):我有類A作爲類B和類C之間的邊界。類A具有註冊爲偵聽器的類C。類B在事件發生時調用A的handlerMethods並且該方法執行一些處理並將事件引發到C.但是A的處理程序方法是公共的。 A被用作接口來代碼,我沒有實現,並希望如果處理程序方法具有私人範圍,以便C例如不能調用類A的處理程序。那麼,我應該如何重新設計我的類來實現這一目標?謝謝! – akmer 2010-07-06 11:32:24