04_简单工厂模式

一、产品类

package com.study.simple_factory

/**
 * 定义手机接口
 */
interface IPhone {
    /**
     * 打电话
     */
    fun call()

    /**
     * 发送短信
     */
    fun sendMsg()

    /**
     * 玩游戏
     */
    fun playGame()
}
package com.study.simple_factory

/**
 * 华为手机
 */
class HuaWeiPhoneImpl : IPhone {
    override fun call() {
        println("华为手机打电话...")
    }

    override fun sendMsg() {
        println("华为手机发短信...")
    }

    override fun playGame() {
        println("华为手机玩游戏...")
    }
}
package com.study.simple_factory

/**
 * 小米手机
 */
class MiPhoneImpl : IPhone {
    override fun call() {
        println("XiaoMi手机打电话...")
    }

    override fun sendMsg() {
        println("XiaoMi手机发短信...")
    }

    override fun playGame() {
        println("XiaoMi手机玩游戏...")
    }

}
package com.study.simple_factory

/**
 * Vivo手机
 */
class VivoPhoneImpl : IPhone {
    override fun call() {
        println("Vivo手机打电话...")
    }

    override fun sendMsg() {
        println("Vivo手机发短信...")
    }

    override fun playGame() {
        println("Vivo手机玩游戏...")
    }

}

二、工厂类

package com.study.simple_factory


/**

 * 手机工厂
 */
object PhoneFactory{

    // 工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则。无法形成基于继承的等级结构。
    fun createPhone(phoneEnum: PhoneEnum) = when (phoneEnum) {
        PhoneEnum.HUAWEI -> HuaWeiPhoneImpl()
        PhoneEnum.VIVO -> VivoPhoneImpl()
        PhoneEnum.MI -> MiPhoneImpl()
    }
}

三、主程序调用

package com.study.simple_factory

/**
 * 
    定义:由一个工厂对象决定创建出哪一种产品类的实例
    类型:创建型,但不属于GOF23种设计模式
    
    适用场景:
    工厂类负责创建的对象比较少
    客户端(应用层)只知道传入工厂类的参数对于如何创建对象(逻辑)不关心
    
    优点:
    只需要传入一个正确的参数,就可以获取你所需要的对象而无须知道其创建细节
    
    缺点:
    工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则。无法形成基于继承的等级结构。
 */

/**
 * 用户端
 */
fun main(args: Array<String>) {
    //    客户端(应用层)只知道传入工厂类的参数对于如何创建对象(逻辑)不关心
    val miPhone = PhoneFactory.createPhone(PhoneEnum.MI)
    val vivoPhone = PhoneFactory.createPhone(PhoneEnum.VIVO)
    val huaweiPhone = PhoneFactory.createPhone(PhoneEnum.HUAWEI)

    miPhone.call()
    vivoPhone.call()
    huaweiPhone.call()
}

四、运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值