Skip to content

Instantly share code, notes, and snippets.

View geraldcroes's full-sized avatar

Gérald Croës geraldcroes

  • TraefikLabs
  • France, Lyon
View GitHub Profile
@geraldcroes
geraldcroes / client.kt
Created December 9, 2017 16:49
FileParserFactory usage
val parserFactory = StandardFileParserFactory()
val fileParser = parserFactory.createFromFileName(“filename.xml”)
@geraldcroes
geraldcroes / CompanionObjectParserFactory.kt
Created December 9, 2017 16:50
CompanionObject in the FileParserFactory
class CompanionObjectFileParserFactory {
companion object : FileParserFactory{
override fun createFromFileName(fileName: String) =
when (fileName.substringAfterLast('.')) {
"xml" -> XmlFileParser()
"json" -> JsonFileParser()
else -> throw Exception("I don't know how to deal with $fileName.")
}
}
}
@geraldcroes
geraldcroes / client.kt
Created December 9, 2017 16:51
One line FileParserFactory
MyFileParserFactory.createFromFileName("filename.json")
@geraldcroes
geraldcroes / FileParserFactory.kt
Last active December 9, 2017 16:53
CompanionObject with synonym for its instances
class CompanionObjectFileParserFactory : FileParserFactory {
companion object : FileParserFactory{
override fun createFromFileName(fileName: String) =
when (fileName.substringAfterLast('.')) {
"xml" -> XmlFileParser()
"json" -> JsonFileParser()
else -> throw Exception("I don't know how to deal with $fileName.")
}
}
/* needed if you want to be able to call the createFromFileName from an instance */
@geraldcroes
geraldcroes / FileParserFactory.kt
Created December 9, 2017 16:54
Factory using the object keyword
object ObjectFileParserFactory : FileParserFactory {
override fun createFromFileName(fileName: String) =
when (fileName.substringAfterLast('.')) {
"xml" -> XmlFileParser()
"json" -> JsonFileParser()
else -> throw Exception("I don't know how to deal with $fileName.")
}
}
@geraldcroes
geraldcroes / client.kt
Created December 9, 2017 16:55
Client of the object factory
//Works…
ObjectFileParserFactory.createFromFileName("filename.foo")
//...and this still works
val fileParser = ObjectFileParserFactory
fileParser.createFromFileName("filename.json")
@geraldcroes
geraldcroes / FileParser.kt
Created December 9, 2017 16:56
Embedded companion object in an interface
interface FileParser {
companion object {
fun createFromFileName(fileName: String) =
when (fileName.substringAfterLast('.')) {
"xml" -> XmlFileParser()
"json" -> JsonFileParser()
else -> throw Exception("I don't know how to deal with $fileName.")
}
}
}
@geraldcroes
geraldcroes / client.kt
Created December 9, 2017 16:58
Calling companion object in the interface
FileParser.createFromFile("filename.json")
@geraldcroes
geraldcroes / extension.kt
Created December 9, 2017 16:59
Extending the companion object in the interface
fun FileParser.Companion.fromFile(filename: String) =
this.createFromFileName(filename)
@geraldcroes
geraldcroes / client.kt
Created December 9, 2017 17:01
infix extension
val parser = FileParser fromFile "filename.json"