Мой общий вопрос в том, когда передавать аргументы конструктору vs, когда передать его методу класса. В общем случае объектом являются «данные» + «методы, действующие на данные».Когда использовать конструктор и когда передавать аргументы
У меня есть несколько вариантов дизайна класса DFS. Какой из следующих примеров лучше всего подходит для защиты?
Вариант 1: График, переданный в конструкторе, источник в функции. Adv: Тот же объект DFS будет повторно использоваться с другим источником.
public class DFS {
Graph g;
public DFS(Graph g) {
this.g = g;
}
public void doDfs(int source) {
// dfs computation
}
}
Вариант 2: Конструктор с 2 Params и не полиморфизма Disadv: для каждого нового источника новый объект должен быть построен.
public class DFS {
Graph g;
int source;
public DFS(Graph g, int source) {
this.g = g;
this.source = source;
}
public void doDfs() {
// dfs computation
}
}
Вариант 3: Конструктор перегрузки Adv: решает все наши случаи использования. Dis: Полиморфизм является дорогостоящим.
public class DFS {
Graph g;
int source;
public DFS(Graph g) {
this.g = g;
}
public DFS(Graph g, int source) {
this.g = g;
this.source = source;
}
public void doDfs() {
doDfs(source);
}
public void doDfs(int source) {
// dfs computation
}
}
Вариант 4: Нет конструктор
public class DFS {
DFS() { }
public void doDFS(Graph g, int source) {
this.g = g;
this.source = source;
// dfs computation
}
}
Взгляните на http://stackoverflow.com/questions/18027135 –
Что вы подразумеваете под «полиморфизмом»? Я не вижу здесь никакого полиморфизма, и я не вижу, как это может быть актуально. –