forked from FranciscoZacarias/Algorithm-Visualizer-JavaFX
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStrategyFactory.java
More file actions
82 lines (78 loc) · 3 KB
/
Copy pathStrategyFactory.java
File metadata and controls
82 lines (78 loc) · 3 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
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Factory;
import Strategy.MazeGenerationStrategy.BacktrackingStrategy;
import Strategy.MazeGenerationStrategy.MazeGenerationStrategy;
import Strategy.HeuristicStrategy.DiagonalStrategy;
import Strategy.HeuristicStrategy.EuclideanStrategy;
import Strategy.HeuristicStrategy.HeuristicStrategy;
import Strategy.HeuristicStrategy.ManhattanStrategy;
import Strategy.HeuristicStrategy.PythagorasStrategy;
import Strategy.MazeGenerationStrategy.KruskalStrategy;
import Strategy.MazeGenerationStrategy.PrimStrategy;
import Strategy.MazeGenerationStrategy.SidewinderStrategy;
import Strategy.PathfindingStrategy.AStarStrategy;
import Strategy.PathfindingStrategy.DijkstraStrategy;
import Strategy.PathfindingStrategy.PathfindingStrategy;
import Strategy.PathfindingStrategy.WavePropagationStrategy;
/**
* Factory that returns a pathfinding strategy
* @author frank
*/
public class StrategyFactory
{
// Pathfinding Factory
public static PathfindingStrategy getPathfindingStrategy(PathfindingStrategy.Algorithms algorithmStrategy, HeuristicStrategy heuristicStrategy)
{
switch(algorithmStrategy)
{
case Dijkstra:
return new DijkstraStrategy();
case AStar:
return new AStarStrategy(false, heuristicStrategy);
case AStarOptimal:
return new AStarStrategy(true, heuristicStrategy);
case WavePropagation:
return new WavePropagationStrategy();
default:
throw new IllegalArgumentException("Pathfinding algorithm not found!");
}
}
// Heuristic for A* Factory
public static HeuristicStrategy getHeuristicStrategy(AStarStrategy.Heuristic strategy)
{
switch(strategy)
{
case Pythagoras:
return new PythagorasStrategy();
case Manhattan:
return new ManhattanStrategy();
case Diagonal:
return new DiagonalStrategy();
case Eudclidean:
return new EuclideanStrategy();
default:
throw new IllegalArgumentException("Heuristic strategy not found!");
}
}
// Maze generation Factory
public static MazeGenerationStrategy getMazeGenStrategy(MazeGenerationStrategy.MazeGen strategy)
{
switch(strategy)
{
case Backtracker:
return new BacktrackingStrategy();
case Kruskal:
return new KruskalStrategy();
case Prim:
return new PrimStrategy();
case Sidewinder:
return new SidewinderStrategy();
default:
throw new IllegalArgumentException("Maze generation algorithm not found!");
}
}
}