Моя проблема в приведенном ниже коде состоит в том, что параметр param для конструктора фактически не отображается непосредственно на поля экземпляра класса.Поля экземпляра получают значение из параметра, для которого я использую метод initalize.Кроме того, я делаю некоторые вещи, чтобы созданный объект мог использоваться непосредственно в следующем коде, например, вызывая drawBoundaries ().Я чувствую, что он делает то, что подразумевается под созданием (инициализацией) Canvas в абстрактном смысле.
Мой конструктор делает слишком много?Если я добавлю методы для явного вызова вещи в конструкторе извне, это будет неправильно.Пожалуйста, дайте мне знать ваши взгляды.
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
public Canvas(ParsedCells seedPatternCells) {
initalizeCanvas(seedPatternCells);
}
private void initalizeCanvas(ParsedCells seedPatternCells) {
setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
drawBoundaries();
placeSeedPatternCellsOnCanvas(seedPatternCells);
}
...
PS: Извините, если это выглядит как глупый вопрос;мой код будет проверен гуру ООП, и я просто волнуюсь: -0
РЕДАКТИРОВАТЬ:
Я прочитал некоторые опасения по поводу переопределения методов в initalizeCanvas () -К счастью, эти методы являются частными и не вызывают никаких других методов.
В любом случае, после дальнейших исследований в сети мне это больше понравилось ... Надеюсь, вы, ребята, согласны !! ??
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
private Canvas() {
}
public static Canvas newInstance(ParsedCells seedPatternCells) {
Canvas canvas = new Canvas();
canvas.setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
canvas.drawBoundaries();
canvas.placeSeedPatternCellsOnCanvas(seedPatternCells);
return canvas;
}