我有一个非常不典型的问题。在我的应用程序中,我有以下代码:
public TaskListDatabases getTaskListDatabases (int mode) {
switch (mode) {
case (MODE_NORMAL):
if (taskListDatabases == null) {
taskListDatabases = new TaskListDatabases(app); // 1st place
}
break;
case (MODE_FORCE_RERUN):
if (taskListDatabases == null) {
taskListDatabases = new TaskListDatabases(app); // 2nd place
} else {
if (taskListDatabases.getStatus() == AsyncTask.Status.FINISHED)
taskListDatabases = new TaskListDatabases(app); // 3rd place
}
break;
}
return taskListDatabases;
}
现在我想创建 4 个其他函数,与上面的函数类似,但实际对象构造位置有所不同(用注释标记)。
在第一个而不是new TaskListDatabases(app)
中,我希望在第二个新任务( app, String, int)
,在第三个新任务 (app, String, String, String)
....
其余的都一样。我想知道是否有机会创建一个将 new TaskListDatabases(app)
部分作为“参数”的函数。如果这只是类的问题,那不会是问题,因为我会有“类参数”。然而这里每个类也有不同的构造函数参数。
有什么想法吗?
最佳答案
你想要的是 abstract factory实现为 anonymous callback背后facade 。使困惑?希望不会是这样:
定义匿名回调接口(interface):
private interface TaskFactory {
Task create();
}
重构基本方法以使用工厂
private Task getTask (int mode, TaskFactory factory) {
switch (mode) {
case MODE_NORMAL:
if (taskListDatabases == null) {
taskListDatabases = factory.create();
}
break;
case (MODE_FORCE_RERUN):
if (taskListDatabases == null) {
taskListDatabases = factory.create();
} else {
if (taskListDatabases.getStatus() == AsyncTask.Status.FINISHED)
taskListDatabases = factory.create();
}
break;
}
return taskListDatabases;
}
然后为每个目的创建外观方法:
public Task getTaskListDatabases(int mode) {
return getTask(mode,
new TaskFactory() {
Task create() {
return new TaskListDatabases(app);
}
}
}
}
public Task getTaskOther(int mode) {
return getTask(mode,
new TaskFactory() {
Task create() {
return new Task(app, "foo", 7; // eg
}
}
}
}
// etc for other Task flavours
关于java类具有不同的参数作为方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349240/