與GWT

2012-09-06 28 views
1

Visitor設計模式我有一個想法,它是這樣的:與GWT

  1. 上解析服務端的文件。
  2. 創建的基於文件的內容來進行操作的列表。
  3. 傳遞的行動,以客戶端的列表。
  4. 在客戶端定義和執行基於列表中的項目的操作。

就像在訪問者模式中一樣,我們有一個動作類,所有動作都繼承了Action接口。客戶然後將實施訪問者。在Java中它會是這樣的:

public interface Action { 
    void act(Visitor visitor); 
} 

public class PerfectAction implements Action { 
    void act(Visitor visitor) { 
     visitor.bePerfect(); 
    } 
} 

public class VisibleAction implements Action { 
    void act(Visitor visitor) { 
     visitor.beVisible(); 
    } 
} 

public interface Visitor { 
    void bePerfect(); 
    void beVisible(); 
} 

的問題
我不能創建代理類的行動和遊客接口。他們不包含setters和/或getters。另外他們不包含任何數據。是否有可能將Visitor對象上的哪些方法從服務端調用到客戶端?

回答

1

要求在工廠只能移動數據左右(EntityProxy和/或ValueProxy),並要求在服務器上做代表客戶(RequestContext)的事情。

爲了轉移行動,在客戶端和服務器首先需要共享可以執行這些行動的知識。

你那麼有兩種解決方法:

  • 移動到GWT-RPC
  • 因爲客戶端必須知道一切可能的行動前期無論如何,創建一個枚舉或任何識別每一個動作,並轉移那些標識符給客戶,這將把他們映射回具體行動來執行。
0

我不認爲這是你將怎樣實現訪問者模式。我會這樣做

public interface ActionVisitor { 
    void visit(VisibleAction va); 
    void visit(PerfrectAction pa); 
} 

public class PerfectAction implements Action { 
    void act(Visitor visitor) { 
     visitor.visit(this); 
    } 
} 

public class VisibleAction implements Action { 
    void act(Visitor visitor) { 
     visitor.visit(this); 
    } 
} 

然後我會定義一個訪問者的執行相應的操作。

以這種方式定義它是非常重要的,這樣訪問者所做的工作是在課堂外部進行的。在此之前,每個實現都有訪問者的不同實現,所以更改行爲會更困難。

我認爲這將解決您的問題,因爲現在做什麼邏輯外部化到訪問者。

+0

的問題是不是模式本身。如果我對訪問者模式的定義的理解是錯誤的,那麼這就是問題所在。主要問題是如何在GWT內部傳輸接口。 – denarced

+0

將接口轉換爲GWT(或使之可用於GWT類)的唯一方法是繼承GWT類並使用訪問者方法擴展它們。 –

+0

你的意思是子類ValueProxy或EntityProxy? – denarced