[英]How can I avoid semi-repeating groups of methods in java?
Let's say I have written the following methods: 假设我写了以下方法:
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();
}
These methods make me feel I'm constantly repeating myself. 这些方法使我感到自己在不断重复自己。 I feel like it should be written something like this: 我觉得应该这样写:
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"},
);
}
This way I won't have to repeat all of those open and submit methods over and over again. 这样,我将不必一遍又一遍地重复所有这些打开和提交方法。
Is there a way to do this? 有没有办法做到这一点?
You can use "callback" for example. 例如,您可以使用“回调” 。 For that do something like this: 为此,请执行以下操作:
void doInSubmit(SubmitCallback callback)
{
open();
callback.call();
submit();
}
And outside: 外面:
public void submitForm100()
{
doInSubmit(new SubmitCallback()
{
void call()
{
setField(1, "bla");
setField(2, "bla bla");
setField(3, "blah");
setArea(1, "blah blah");
}
})
}
You could use something like: 您可以使用类似:
public interface FormSubmission {
void set();
default submitForm() {
open();
set();
submit();
}
}
Then you code would look like: 然后,您的代码将如下所示:
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
}
It is similar to the command pattern. 它类似于命令模式。
I don't think so, but why don't you make this way: 我不这么认为,但是为什么不这样做:
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.