一、工厂类
package com.study.abstract_factory.factory
import com.study.abstract_factory.product.PhoneType
interface IFactory {
fun <T> createPhone(phoneType: PhoneType): T
}
package com.study.abstract_factory.factory
import com.study.abstract_factory.product.PhoneType
abstract class PhoneFactory : IFactory {
override fun <T> createPhone(phoneType: PhoneType) = Class.forName(phoneType.className).newInstance() as T
}
package com.study.abstract_factory.factory
import com.study.abstract_factory.product.GameHuaWeiPhone
import com.study.abstract_factory.product.PhoneType
import com.study.abstract_factory.product.PowerHuaWeiPhone
object HuaWeiPhoneFactory : PhoneFactory() {
fun createPowerPhone() = createPhone<PowerHuaWeiPhone>(PhoneType.HUAWEIPOWER)
fun createGamePhone() = createPhone<GameHuaWeiPhone>(PhoneType.HUAWEIGAME)
}
package com.study.abstract_factory.factory
import com.study.abstract_factory.product.*
object VivoPhoneFactory : PhoneFactory() {
fun createPowerPhone() = createPhone<PowerVivoPhone>(PhoneType.VIVOPOWER)
fun createGamePhone() = createPhone<GameVivoPhone>(PhoneType.VIVOGAME)
}
二、产品类
package com.study.abstract_factory.product
interface IPhone {
fun call()
fun sendMsg()
fun playGame()
}
package com.study.abstract_factory.product
abstract class AbstractHuaWeiPhone : IPhone {
override fun call() {
println("华为手机打电话...")
}
override fun sendMsg() {
println("华为手机发短信...")
}
override fun playGame() {
println("华为手机玩游戏...")
}
abstract fun specialOptions()
}
package com.study.abstract_factory.product
abstract class AbstractVivoPhone : IPhone {
override fun call() {
println("华为手机打电话...")
}
override fun sendMsg() {
println("华为手机发短信...")
}
override fun playGame() {
println("华为手机玩游戏...")
}
abstract fun specialOptions()
}
package com.study.abstract_factory.product
class GameHuaWeiPhone : AbstractHuaWeiPhone() {
override fun specialOptions() {
println("华为游戏手机...")
}
}
package com.study.abstract_factory.product
class GameVivoPhone : AbstractVivoPhone() {
override fun specialOptions() {
println("Vivo游戏手机...")
}
}
package com.study.abstract_factory.product
class PowerHuaWeiPhone : AbstractHuaWeiPhone() {
override fun specialOptions() {
println("华为电量手机...")
}
}
package com.study.abstract_factory.product
class PowerVivoPhone : AbstractVivoPhone() {
override fun specialOptions() {
println("Vivo电量手机...")
}
}
三、主程序调用
package com.study.abstract_factory
import com.study.abstract_factory.factory.HuaWeiPhoneFactory
import com.study.abstract_factory.factory.VivoPhoneFactory
fun main() {
val powerHuaWeiPhone = HuaWeiPhoneFactory.createPowerPhone()
val gameHuaWeiPhone = HuaWeiPhoneFactory.createGamePhone()
powerHuaWeiPhone.specialOptions()
gameHuaWeiPhone.specialOptions()
println("=========================================")
val powerVivoPhone = VivoPhoneFactory.createPowerPhone()
val gameVivoPhone = VivoPhoneFactory.createGamePhone()
powerVivoPhone.specialOptions()
gameVivoPhone.specialOptions()
}
四、运行结果