设计模式

设计模式 ~ 工厂模式

2021-11-10  本文已影响0人  BTPJ

1、简单工厂模式

/**
 * 定义一个通用的push推送接口
 * @author LTP  2021/11/10
 */
interface IPush {
    /** 定义一个抽象的push方法 */
    fun push()
}
/**
* 具体产品类:小米推送具体实现
* @author LTP  2021/11/10
*/
class MiPush : IPush {

   override fun push() {
       println("小米手机使用小米推送")
   }
}
/**
 * 具体产品类:华为推送具体实现
 * @author LTP  2021/11/10
 */
class HuaWeiPush : IPush {

    override fun push() {
        println("华为手机使用华为推送")
    }
}
/**
 * 具体产品类:极光推送具体实现
 * @author LTP  2021/11/10
 */
class JiGuangPush : IPush {

    override fun push() {
        println("其他手机使用极光推送")
    }
}
/**
 * 推送工厂类
 * @author LTP  2021/11/10
 */
object PushFactory {

    /**
     * 根据具体的手机类型使用具体的推送服务
     *
     * @param type 推送类型
     * @return Push 具体的推送类型
     */
    fun createPush(type: String): IPush {
        return when (type) {
            "xiaoMi" -> MiPush()
            "huaWei" -> HuaWeiPush()
            else -> JiGuangPush()
        }
    }
}
/**
 * 具体调用
 *
 * @author LTP  2021/11/10
 */
class CreatePush {

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            PushFactory.createPush("xiaoMi").push()
            PushFactory.createPush("huaWei").push()
        }
    }
}
执行结果:
小米手机使用小米推送
华为手机使用华为推送

2、工厂方法模式

    /**
     * 推送抽象工厂类
     * @author LTP  2021/11/10
     */
    abstract class AbsPushFactory {

          abstract fun <T : IPush> createPush(clazz: Class<T>): T
    }
    /**
     * @author LTP  2021/11/10
     */
  object PushFactory : AbsPushFactory() {

      override fun <T : IPush> createPush(clazz: Class<T>): T {
           return Class.forName(clazz.name).getDeclaredConstructor().newInstance() as T
    }
}
/**
 * 具体产品类:Oppo推送具体实现
 * @author LTP  2021/11/10
 */
class OppoPush : IPush {

    override fun push() {
        println("oppo手机使用oppo推送")
    }
}
/**
 * 具体调用
 * 
 * @author LTP  2021/11/10
 */
class CreatePush {

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            PushFactory.createPush(MiPush::class.java).push()
            PushFactory.createPush(HuaWeiPush::class.java).push()
            PushFactory.createPush(OppoPush::class.java).push()
        }
    }
}
执行结果:
小米手机使用小米推送
华为手机使用华为推送
oppo手机使用oppo推送

3、抽象工厂模式

/**
 * 定义一个通用的发送短信接口
 * @author LTP  2021/11/10
 */
interface ISend {
    /** 定义一个抽象的send方法 */
    fun send()
}
/**
 * 具体产品类:小米短信具体实现(华为代码同理已省略)
 * @author LTP  2021/11/10
 */
class MiSend : ISend {

    override fun send() {
        println("小米手机发送小米短信")
    }
}
/**
 * 推送发短信抽象工厂类
 * @author LTP  2021/11/10
 */
abstract class AbsPushSendFactory {

    abstract fun createPush(): IPush
    abstract fun createSend(): ISend
}
/**
 * 华为工厂类
 *
 * @author LTP  2021/11/10
 */
class HuaWeiFactory : AbsPushSendFactory() {

    override fun createPush(): IPush {
        return HuaWeiPush()
    }

    override fun createSend(): ISend {
        return HuaWeiSend()
    }
}
/**
 * 具体调用
 *
 * @author LTP  2021/11/10
 */
class CreatePushSend {

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            // 小米工厂
            val miFactory = MiFactory()
            miFactory.createPush().push()
            miFactory.createSend().send()

            // 华为工厂
            val huaWeiFactory = HuaWeiFactory()
            huaWeiFactory.createPush().push()
            huaWeiFactory.createSend().send()
        }
    }
}
执行结果:
小米手机使用小米推送
小米手机发送小米短信
华为手机使用华为推送
华为手机发送华为短信

4、总结对比

上一篇下一篇

猜你喜欢

热点阅读