我有一个非常不典型的问题。在我的应用程序中,我有以下代码:
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个与上面类似的其他函数,但实际对象构造位置不同(用注释标记)。
在第1代而不是new TaskListDatabases(app)
我希望new Task (app, int, int)
,在第2 new Task (app, String, int)
,第3 new Task (app, String, String, String)
....
其余的都是一样的。我想知道是否有机会创建一个函数作为"参数"部分new TaskListDatabases(app)
。如果这只是课堂问题,那就不会出现问题,因为我会有#34; Class param"。但是这里每个类都有不同的构造函数参数。
有什么想法吗?
答案 0 :(得分:0)
您想要的是在abstract factory后面anonymous callback实施的facade。困惑?希望不会在此之后:
定义匿名回调的界面:
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