Implementation of https://en.wikipedia.org/wiki/Factory_method_pattern#Java in Kotlin using companion object
package org.myorg
fun main(args: Array<String>) {
val ordinaryGame = MazeGame.makeOrdinaryMazeGame()
val magicGame = MazeGame.makeMagicMazeGame()
}
abstract class Room {
fun connect(room: Room) {
}
}
class MagicRoom : Room()
class OrdinaryRoom : Room()
class MazeGame private constructor(room1: Room, room2: Room) {
private val rooms = mutableListOf<Room>()
init {
room1.connect(room2)
rooms.add(room1)
rooms.add(room2)
}
companion object {
fun makeMagicMazeGame() = MazeGame(MagicRoom(), MagicRoom())
fun makeOrdinaryMazeGame() = MazeGame(OrdinaryRoom(), OrdinaryRoom())
}
}
Responder