[英]How can I avoid semi-repeating groups of methods in java?
假設我寫了以下方法:
public void submitForm1() {
open();
setField(1, "blah");
setField(3, "bla");
setField(4, "blah blah");
submit();
}
public void submitForm2() {
open();
setField(1, "blah");
checkBox(1 , true);
submit();
}
....
public void submitForm100() {
open();
setField(1, "bla");
setField(2, "bla bla");
setField(3, "blah");
setArea(1, "blah blah");
submit();
}
這些方法使我感到自己在不斷重復自己。 我覺得應該這樣寫:
public void submitForm1() {
MyMethods.submitForm(
{SET_FIELD, 1, "blah"},
{SET_FIELD, 3, "bla"},
{SET_FIELD, 4, "blah blah"}
);
}
public void submitForm2() {
MyMethods.submitForm(
{SET_FIELD, 1, "blah"},
{CHECKBOX, 1, true}
);
}
....
public void submitForm100() {
MyMethods.submitForm(
{SET_FIELD, 1, "bla"},
{SET_FIELD, 2, "bla bla"},
{SET_FIELD, 3, "blah"},
{SET_AREA, 1, "blah blah"},
);
}
這樣,我將不必一遍又一遍地重復所有這些打開和提交方法。
有沒有辦法做到這一點?
例如,您可以使用“回調” 。 為此,請執行以下操作:
void doInSubmit(SubmitCallback callback)
{
open();
callback.call();
submit();
}
外面:
public void submitForm100()
{
doInSubmit(new SubmitCallback()
{
void call()
{
setField(1, "bla");
setField(2, "bla bla");
setField(3, "blah");
setArea(1, "blah blah");
}
})
}
您可以使用類似:
public interface FormSubmission {
void set();
default submitForm() {
open();
set();
submit();
}
}
然后,您的代碼將如下所示:
Map<Integer, FormSubmission > forms = new HashMap<> ();
//in constructor or static initialisation block:
forms.put(1, () -> { setField(1, "blah");
setField(3, "bla");
setField(4, "blah blah"); });
//etc.
public void submitForm(Integer i) {
forms.get(i).submitForm(); //probably want to handle NPE here
}
它類似於命令模式。
我不這么認為,但是為什么不這樣做:
public void submit() {
open();
switch(formNumber) {
case 1:
submitForm1();
case 2:
submitForm2();
case 100:
submitForm100();
default:
break;
}
submit();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.