Реализации на Kotlin
Abstract factory
Общая реализация на языке Kotlin
Определение общего интерфейса инструментов
interface ITool {
fun use()
}
Непосредственная реализация конкретных видов инструментов
abstract class AbstractHacksaw(
private val type: String,
private val name: String = SAW_NAME
) : ITool {
override fun use() {
println("Instrument: $name can be used for $type")
}
companion object {
protected const val SAW_NAME: String = "Saw"
}
}
class MetalHacksaw : AbstractHacksaw(SAW_TYPE) {
companion object {
private const val SAW_TYPE = "Metal"
}
}
class WoodHacksaw : AbstractHacksaw(SAW_TYPE) {
companion object {
private const val SAW_TYPE = "Wood"
}
}
abstract class AbstractHammer(
private val type: String,
private val name: String = HAMMER_NAME
) : ITool {
override fun use() {
println("Instrument: $name can be used for $type")
}
companion object {
protected const val HAMMER_NAME: String = "Hammer"
}
}
class MetalHammer : AbstractHammer(HAMMER_TYPE) {
companion object {
private const val HAMMER_TYPE = "Metal"
}
}
class WoodenHammer : AbstractHammer(HAMMER_TYPE) {
companion object {
private const val HAMMER_TYPE = "Wood"
}
}
Реализация абстрактных фабрик инструментов
interface AbstractFactory {
fun createHacksaw(): AbstractHacksaw
fun createHammer(): AbstractHammer
}
class MetalFactory : AbstractFactory {
override fun createHammer(): MetalHammer {
return MetalHammer()
}
override fun createHacksaw(): MetalHacksaw {
return MetalHacksaw()
}
}
class WoodFactory : AbstractFactory {
override fun createHammer(): WoodenHammer {
return WoodenHammer()
}
override fun createHacksaw(): WoodHacksaw {
return WoodHacksaw()
}
}
Main
fun main() {
val metalFactory = MetalFactory()
val metalHammer: MetalHammer = metalFactory.createHammer()
metalHammer.use()
val metalHacksaw: MetalHacksaw = metalFactory.createHacksaw()
metalHacksaw.use()
val woodFactory = WoodFactory()
val woodenHammer: WoodenHammer = woodFactory.createHammer()
woodenHammer.use()
val woodHacksaw: WoodHacksaw = woodFactory.createHacksaw()
woodHacksaw.use()
}
Last updated
Was this helpful?