50 lines
1.1 KiB
Java
50 lines
1.1 KiB
Java
//: patterns/absfactory/GameEnvironment2.java
|
|
// Using the Supplier<> Functional Interface.
|
|
package patterns.absfactory;
|
|
import java.util.function.*;
|
|
|
|
class GameElementFactory2 {
|
|
Supplier<Player> player;
|
|
Supplier<Obstacle> obstacle;
|
|
}
|
|
|
|
// Concrete factories:
|
|
class KittiesAndPuzzles2
|
|
extends GameElementFactory2 {
|
|
KittiesAndPuzzles2() {
|
|
player = Kitty::new;
|
|
obstacle = Puzzle::new;
|
|
}
|
|
}
|
|
|
|
class KillAndDismember2
|
|
extends GameElementFactory2 {
|
|
KillAndDismember2() {
|
|
player = KungFuGuy::new;
|
|
obstacle = NastyWeapon::new;
|
|
}
|
|
}
|
|
|
|
public class GameEnvironment2 {
|
|
private Player p;
|
|
private Obstacle ob;
|
|
public GameEnvironment2(
|
|
GameElementFactory2 factory) {
|
|
p = factory.player.get();
|
|
ob = factory.obstacle.get();
|
|
}
|
|
public void play() {
|
|
p.interactWith(ob);
|
|
}
|
|
public static void main(String args[]) {
|
|
GameElementFactory2
|
|
kp = new KittiesAndPuzzles2(),
|
|
kd = new KillAndDismember2();
|
|
GameEnvironment2
|
|
g1 = new GameEnvironment2(kp),
|
|
g2 = new GameEnvironment2(kd);
|
|
g1.play();
|
|
g2.play();
|
|
}
|
|
} ///:~
|