forked from woowacourse/java-chess
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathControllerFactory.java
More file actions
70 lines (60 loc) · 2.37 KB
/
Copy pathControllerFactory.java
File metadata and controls
70 lines (60 loc) · 2.37 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
package chess.controller;
import chess.controller.game.GameController;
import chess.controller.main.MainCommand;
import chess.controller.main.MainController;
import chess.controller.room.RoomController;
import chess.controller.user.UserController;
import chess.db.FixedConnectionPool;
import chess.db.JdbcTemplate;
import chess.repository.GameDao;
import chess.repository.GameJdbcDao;
import chess.repository.RoomDao;
import chess.repository.RoomJdbcDao;
import chess.repository.UserDao;
import chess.repository.UserJdbcDao;
import chess.service.GameService;
import chess.service.RoomService;
import chess.service.UserService;
import chess.view.input.InputView;
import chess.view.output.GameOutputView;
import chess.view.output.MainOutputView;
import chess.view.output.RoomOutputView;
import chess.view.output.UserOutputView;
import java.util.Map;
import java.util.Scanner;
public class ControllerFactory {
private static final MainController INSTANCE;
private static final InputView INPUT_VIEW = new InputView(new Scanner(System.in));
private static final JdbcTemplate JDBC_TEMPLATE = new JdbcTemplate(FixedConnectionPool.getInstance());
static {
final CommandMapper<MainCommand, SubController> mainCommandMapper = new CommandMapper<>(Map.of(
MainCommand.USER, userController(),
MainCommand.ROOM, roomController(),
MainCommand.START, gameController(),
MainCommand.END, () -> {
}
));
INSTANCE = new MainController(INPUT_VIEW, new MainOutputView(), mainCommandMapper);
}
private static SubController userController() {
return new UserController(INPUT_VIEW, new UserOutputView(), new UserService(userDao()));
}
private static UserDao userDao() {
return new UserJdbcDao(JDBC_TEMPLATE);
}
private static SubController roomController() {
return new RoomController(INPUT_VIEW, new RoomOutputView(), new RoomService(roomDao()));
}
private static RoomDao roomDao() {
return new RoomJdbcDao(JDBC_TEMPLATE);
}
private static SubController gameController() {
return new GameController(INPUT_VIEW, new GameOutputView(), new GameService(gameDao()));
}
private static GameDao gameDao() {
return new GameJdbcDao(JDBC_TEMPLATE);
}
public static MainController mainController() {
return INSTANCE;
}
}