-
Notifications
You must be signed in to change notification settings - Fork 275
Expand file tree
/
Copy pathApplication.java
More file actions
113 lines (90 loc) · 4.68 KB
/
Copy pathApplication.java
File metadata and controls
113 lines (90 loc) · 4.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package subway;
import java.util.Scanner;
import subway.controller.InitController;
import subway.controller.InputController;
import subway.controller.SubwayController;
import subway.domain.Station;
import subway.repository.LineRepository;
import subway.repository.StationRepository;
import subway.service.LineService;
import subway.service.MinimumTimeService;
import subway.service.ShortestPathService;
import subway.service.StationService;
import subway.validation.EndStationValidation;
import subway.validation.MainFunctionValidation;
import subway.validation.SelectRouteValidation;
import subway.validation.StartStationValidation;
import subway.view.Input.InputView;
import subway.view.output.OutputView;
public class Application {
public static void main(String[] args) {
final Scanner scanner = new Scanner(System.in);
// 객체 생성
InputView inputView = createInputView();
OutputView outputView = new OutputView();
StationService stationService = createStationService(new StationRepository());
LineService lineService = createLineService(new LineRepository());
ShortestPathService shortestPathService = new ShortestPathService();
MinimumTimeService minimumTimeService = new MinimumTimeService();
InitController initController = createInitController(stationService, lineService);
InputController inputController = createInputController(inputView, outputView, scanner);
SubwayController subwayController = createSubwayController(shortestPathService, minimumTimeService, outputView);
// 메서드 호출
executeControllers(initController, inputController, subwayController);
}
private static InputView createInputView() {
MainFunctionValidation mainFunctionValidation = new MainFunctionValidation();
SelectRouteValidation selectRouteValidation = new SelectRouteValidation();
StartStationValidation startStationValidation = new StartStationValidation();
EndStationValidation endStationValidation = new EndStationValidation();
return new InputView(mainFunctionValidation, selectRouteValidation, startStationValidation,
endStationValidation);
}
private static StationService createStationService(StationRepository stationRepository) {
return StationService.createStationService(stationRepository);
}
private static LineService createLineService(LineRepository lineRepository) {
return LineService.createLineService(lineRepository);
}
private static InitController createInitController(StationService stationService, LineService lineService) {
return InitController.createInitController(stationService, lineService);
}
private static InputController createInputController(InputView inputView, OutputView outputView, Scanner scanner) {
return InputController.createInputController(inputView, outputView, scanner);
}
private static SubwayController createSubwayController(ShortestPathService shortestPathService,
MinimumTimeService minimumTimeService,
OutputView outputView) {
return SubwayController.createSubwayController(shortestPathService, minimumTimeService, outputView);
}
private static void executeControllers(InitController initController, InputController inputController,
SubwayController subwayController) {
initController.init();
while (true) {
String mainFunc = inputController.inputMainFunc();
if (mainFunc.equals("Q")) {
System.exit(0);
}
if (mainFunc.equals("1")) {
executeRouteSelection(inputController, subwayController);
}
}
}
private static void executeRouteSelection(InputController inputController, SubwayController subwayController) {
String selectRouteFunc = inputController.inputSelectRoute();
if (selectRouteFunc.equals("B")) {
return;
}
Station start = inputStartStation(inputController);
Station end = inputEndStation(inputController, start);
subwayController.calculateAndPrintRoute(selectRouteFunc, start, end);
}
private static Station inputStartStation(InputController inputController) {
String stationName = inputController.inputStartStation();
return new Station(stationName);
}
private static Station inputEndStation(InputController inputController, Station start) {
String stationName = inputController.inputEndStation(start.getName());
return new Station(stationName);
}
}