Kotlin 的抽象工廠模式和 Java 版差不多,只差在 Get 和 Set 寫法不同,還有一些語法差異
假設我是補習班工廠,要產出工程師、設計師
interface MakeVocationalProduct {
fun getName(name: String): String
}
interface CreateVocationalFactory {
var createVocational: MakeVocationalProduct
}
3-1. 製造工程師
class MakeEngineerProduct : MakeVocationalProduct {
override fun getName(name: String): String {
return "工程師: $name"
}
}
3-2. 製造設計師
class MakeDesignerProduct : MakeVocationalProduct {
override fun getName(name: String): String {
return "設計師: $name"
}
}
4-1. 創造工程師工廠
class CreateEngineerFactory : CreateVocationalFactory {
override var createVocational: MakeVocationalProduct
get() = MakeEngineerProduct()
set(value) {}
}
4-2. 創造設計師工廠
class CreateDesignerFactory : CreateVocationalFactory {
override var createVocational: MakeVocationalProduct
get() = MakeDesignerProduct();
set(value) {}
}
val engineer: CreateVocationalFactory = CreateEngineerFactory()
val designer: CreateVocationalFactory = CreateDesignerFactory()
Log.d("${engineer.createVocational.getName("Andy")} / ${designer.createVocational.getName("AWD")}")
工程師: Andy / 設計師: AWD