OOP模式-处理极其相似的方法



我有一些方法非常相似,除了每个方法中有一行。我正在努力避免重复的代码,并在代码中应用良好的实践,但我不是OOP专家。除了一个调用之外,两种方法都是相同的:

例如:

classa.java

public static void updateTable() throws Exception {
List<T> newSchema = AvroToHive.generateSchema(...);
...
}

classb.java

public static void updateTable() throws Exception {
List<T> newSchema = AWSGlue.generateSchema(...);
...
}

我想将方法updateTable()移到另一个公共类中,并避免在我的项目中使用类似的方法。

避免这种情况的正确方法是什么?我应该用方法generateSchema编写一个类似"Metastore"的接口,将其实现到类AvroToHive/AWSGlue中,并将其作为参数传递,如:

public static void updateTable(Metastore metastore) throws Exception {
List<T> newSchema = metastore.generateSchema(...);
...
}

实现它的替代方案是使用函数接口。

AvroToHive示例:

import java.util.ArrayList;
import java.util.List;
public class AvroToHive {
public static List<String> generateSchema() {
ArrayList<String> values = new ArrayList<>();
values.add("Hello");
return values;
}
}

AWS数值示例:

import java.util.ArrayList;
import java.util.List;
public class AWSGlue {
public static List<Integer> generateSchema() {
ArrayList<Integer> values = new ArrayList<>();
values.add(10);
return values;
}
}

功能接口示例:

import java.util.List;
public class FuncInterExample {
@FunctionalInterface
interface ListSupplier<T> {
List<T> generateSchema();
}
public static void main(String[] args) {
updateTable(AvroToHive::generateSchema);
updateTable(AWSGlue::generateSchema);
}
public static <T> void updateTable(ListSupplier<T> obj) {
List<T> list = obj.generateSchema();
for(T item : list) {
System.out.println(item);
}
}
}

样本输出:

Hello
10

interface作为它们的公共父级,如下所示:

interface Common {
void generateSchema();
}
class AvroToHive implements Common {
public void generateSchema() {
System.out.println("In AvroToHive");
}
}
class AWSGlue implements Common {
public void generateSchema() {
System.out.println("In AWSGlue");
}
}
public class Main {
public static void main(String[] args) {
Common obj1 = new AvroToHive();
Common obj2 = new AWSGlue();
updateTable(obj1);
updateTable(obj2);
}
public static void updateTable(Common obj) {
obj.generateSchema();
}
}

输出:

In AvroToHive
In AWSGlue

相关内容

  • 没有找到相关文章

最新更新