Skip to content

Commit c15b7f4

Browse files
committed
Pattern: Factory Method
1 parent 5729d15 commit c15b7f4

File tree

6 files changed

+105
-10
lines changed

6 files changed

+105
-10
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
* Creational Patterns
66
* Abstract Factory
77
* Builder
8+
* Factory Method

src/linuxMain/kotlin/org/dronix/kotlin/designpatterns/Main.kt

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@ package org.dronix.kotlin.designpatterns
22

33
import org.dronix.kotlin.designpatterns.base.Maze
44
import org.dronix.kotlin.designpatterns.creational.abstractFactory.BombedMazeFactory
5+
import org.dronix.kotlin.designpatterns.creational.abstractFactory.EnchantedMazeFactory
56
import org.dronix.kotlin.designpatterns.creational.builder.CountingMazeBuilder
67
import org.dronix.kotlin.designpatterns.creational.builder.StandardMazeBuilder
8+
import org.dronix.kotlin.designpatterns.creational.factoryMethod.BombedMazeGame
9+
import org.dronix.kotlin.designpatterns.creational.factoryMethod.EnchantedMazeGame
710

811
fun hello(): String = "Hello, Kotlin/Native Design Patterns!"
912

1013
fun main(args: Array<String>) {
1114

1215
val mazeBombed = createBombedMaze()
1316
val mazeStandard = createStandardMaze()
17+
val enchantedMaze= createEnchantedMaze()
1418
val countingMaze = createCountingMaze()
1519

1620
println(hello())
@@ -19,23 +23,28 @@ fun main(args: Array<String>) {
1923
fun createBombedMaze(): Maze{
2024

2125
val bombedMazeFactory = BombedMazeFactory()
22-
val mazeGame = MazeGame()
26+
val mazeGame = MazeGameCreator()
2327

24-
return mazeGame.createMaze(bombedMazeFactory)
28+
return mazeGame.createMazeWithAbstractFactory(bombedMazeFactory)
2529
}
2630

2731
fun createStandardMaze(): Maze{
2832
val standardMazeBuilder = StandardMazeBuilder()
29-
val mazeGame = MazeGame()
33+
val mazeGame = MazeGameCreator()
3034

31-
return mazeGame.createMaze(standardMazeBuilder)
35+
return mazeGame.createMazeWithBuilder(standardMazeBuilder)
36+
}
37+
38+
fun createEnchantedMaze(): Maze{
39+
val enchantedMaze = EnchantedMazeGame()
40+
return enchantedMaze.createMaze()
3241
}
3342

3443
fun createCountingMaze(): Maze{
3544
val countingMazeBuilder = CountingMazeBuilder()
36-
val mazeGame = MazeGame()
45+
val mazeGame = MazeGameCreator()
3746

38-
val maze = mazeGame.createMaze(countingMazeBuilder)
47+
val maze = mazeGame.createMazeWithBuilder(countingMazeBuilder)
3948
val (rooms, doors)= countingMazeBuilder.getCounts()
4049
println("Maze rooms: $rooms doors: $doors")
4150
return maze

src/linuxMain/kotlin/org/dronix/kotlin/designpatterns/MazeGame.kt renamed to src/linuxMain/kotlin/org/dronix/kotlin/designpatterns/MazeGameCreator.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import org.dronix.kotlin.designpatterns.base.wall.Wall
77
import org.dronix.kotlin.designpatterns.creational.abstractFactory.MazeFactory
88
import org.dronix.kotlin.designpatterns.creational.builder.MazeBuilder
99

10-
class MazeGame {
10+
class MazeGameCreator {
1111
fun createMaze(): Maze {
1212
val aMaze = Maze()
1313
val room1 = Room(1)
@@ -26,11 +26,11 @@ class MazeGame {
2626
room2.setSide(Direction.East, Wall())
2727
room2.setSide(Direction.South, Wall())
2828
room2.setSide(Direction.West, theDoor)
29-
return aMaze
3029

30+
return aMaze
3131
}
3232

33-
fun createMaze(mazeFactory: MazeFactory): Maze{
33+
fun createMazeWithAbstractFactory(mazeFactory: MazeFactory): Maze{
3434

3535
val aMaze = mazeFactory.makeMaze()
3636
val room1 = mazeFactory.makeRoom(1)
@@ -49,10 +49,11 @@ class MazeGame {
4949
room2.setSide(Direction.East, mazeFactory.makeWall())
5050
room2.setSide(Direction.South, mazeFactory.makeWall())
5151
room2.setSide(Direction.West, theDoor)
52+
5253
return aMaze
5354
}
5455

55-
fun createMaze(mazeBuilder: MazeBuilder): Maze {
56+
fun createMazeWithBuilder(mazeBuilder: MazeBuilder): Maze {
5657
return mazeBuilder
5758
.buildMaze()
5859
.buildRoom(1)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.dronix.kotlin.designpatterns.creational.factoryMethod
2+
3+
import org.dronix.kotlin.designpatterns.base.room.BombRoom
4+
import org.dronix.kotlin.designpatterns.base.room.Room
5+
import org.dronix.kotlin.designpatterns.base.wall.BombedWall
6+
import org.dronix.kotlin.designpatterns.base.wall.Wall
7+
8+
class BombedMazeGame : MazeGame() {
9+
10+
override fun makeWall(): Wall {
11+
return BombedWall()
12+
}
13+
14+
override fun makeRoom(roomNumber: Int): Room {
15+
return BombRoom(roomNumber)
16+
}
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.dronix.kotlin.designpatterns.creational.factoryMethod
2+
3+
import org.dronix.kotlin.designpatterns.base.CastSpell
4+
import org.dronix.kotlin.designpatterns.base.door.Door
5+
import org.dronix.kotlin.designpatterns.base.door.DoorNeedingSpell
6+
import org.dronix.kotlin.designpatterns.base.room.EnchantedRoom
7+
import org.dronix.kotlin.designpatterns.base.room.Room
8+
9+
class EnchantedMazeGame : MazeGame() {
10+
11+
override fun makeRoom(roomNumber: Int): Room {
12+
return EnchantedRoom(roomNumber, CastSpell())
13+
}
14+
15+
override fun makeDoor(room1: Room, room2: Room): Door {
16+
return DoorNeedingSpell(room1, room2)
17+
}
18+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.dronix.kotlin.designpatterns.creational.factoryMethod
2+
3+
import org.dronix.kotlin.designpatterns.base.Direction
4+
import org.dronix.kotlin.designpatterns.base.Maze
5+
import org.dronix.kotlin.designpatterns.base.door.Door
6+
import org.dronix.kotlin.designpatterns.base.room.Room
7+
import org.dronix.kotlin.designpatterns.base.wall.Wall
8+
9+
open class MazeGame {
10+
11+
open fun makeMaze(): Maze {
12+
return Maze()
13+
}
14+
15+
open fun makeWall(): Wall {
16+
return Wall()
17+
}
18+
19+
open fun makeRoom(roomNumber: Int): Room {
20+
return Room(roomNumber)
21+
}
22+
23+
open fun makeDoor(room1: Room, room2: Room): Door {
24+
return Door(room1, room2)
25+
}
26+
27+
fun createMaze(): Maze {
28+
29+
val aMaze = makeMaze()
30+
val room1 = makeRoom(1)
31+
val room2 = makeRoom(2)
32+
val theDoor = makeDoor(room1, room2)
33+
34+
aMaze.addRoom(room1)
35+
aMaze.addRoom(room2)
36+
37+
room1.setSide(Direction.North, makeWall())
38+
room1.setSide(Direction.East, theDoor)
39+
room1.setSide(Direction.South, makeWall())
40+
room1.setSide(Direction.West, makeWall())
41+
42+
room2.setSide(Direction.North, makeWall())
43+
room2.setSide(Direction.East, makeWall())
44+
room2.setSide(Direction.South, makeWall())
45+
room2.setSide(Direction.West, theDoor)
46+
47+
return aMaze
48+
}
49+
}

0 commit comments

Comments
 (0)