下面是我的一些Java代碼使用訪客模式在Java中實現toString方法?
public List<OBJ> a = new ArrayList<OBJ>();
public String A;
public String B;
public String C;
for (OBJ o : a) {
// .... TODO
}
所以我有一個接口OBJ並有實現OBJ說X,Y,Z。所以我存儲在列表中的一個X/Y/Z對象的三個對象。現在說我想要通過循環,如果o是實例X在A中存儲X.value,如果Y在B中存儲Y.value,並且Z在Z中存儲Z.value,那麼問題實際上是怎麼回事你找出哪個對象類型o是(X,Y,Z)來將它們的值存儲在正確的字符串中。
注意:我想使用Visitor pattern或類似的東西,但我沒有確切掌握它,所以我要求您的幫助。
這意味着沒有INSTANCEOF(S)或類型轉換和像
interface OBJ {
void blah();
}
class X implements OBJ {
public void blah();
} // etc
由於沒有專門的方法!我真的想要得到軟件工程的這個重要方面!
嘿哇感謝詳細和快速響應,但我的情況有點更復雜,對不起,我沒有之前添加此。
所以字符串A,B,C,實際上裝在另一個類像
class ARGH {
public List<OBJ> a = new ArrayList<OBJ>();
public String A;
public String B;
public String C;
//invisible constructor here
public String toString() {
for (OBJ o : a) {
// .... TODO
}
return "some string"
}
}
public void main (String[] args) {
ARGH argh = new ARGH();
// Setup some X, Y, Z objects and their values here
String D = argh.toString();
// Do something to D
}
所以字符串和列表實際上是沒有全局變量,所以我不認爲這會工作:
ObjVisitor v = new ObjVisitor() {
@Override
public void visit(X x) {
A = x.value();
}
// And so on.
}
我假設我必須以某種方式將字符串A,B,C傳入訪問方法,但我不知道如何執行該操作並仍然保留訪問者模式。
我不知道你能做到這一點,通過A,B和C到方法將無法正常工作,由於他們的不變性。您可以創建A,B和C StringBuilders並將它們作爲參數傳遞給ObjVisitor構造函數,然後它將引用這些StringBuilders? –