移动 前端 Python Android Java我的Kotlin之旅Android · Kotlin · 移动开发 · 性能测试 · 无线技术

Kotlin(八)kotlin设计模式-创建型

2021-01-03  本文已影响0人  zcwfeng

创建型模式 - 工厂

Kotlin里面几种主流创建型设计模式:工厂方法模式,抽象工厂模式,构建者模式

8.1 伴生对象增强工厂模式

通过一个工厂类,隐藏对象。典型场景就是拥有一个父类和多个子类,通过这种模式创建子类对象。

公共模型例子

interface Computer{
    val cpu:String
}
class PC(override val cpu:String="Core"):Computer
class Server(override val cpu:String="Xeon"):Computer
enum class ComputerType{
    PC,Server
}
1 用kotlin 模仿Java 创建工厂


class ComputerFactory{
    fun produce(type:ComputerType):Computer{
        return when(type){
            ComputerType.PC -> PC()
            ComputerType.Server -> Server()
        }
    }
}

fun main() {
    val computer = ComputerFactory().produce(ComputerType.PC)
    println(computer.cpu)
}
2 用object天然单利简化---替代工厂类
/**
* 利用object单利替换工厂类,并且利用操作符重载invoke方法替代produce
*/
object ComputerFactory {
   operator fun invoke(type: ComputerType): Computer {
       return when (type) {
           ComputerType.PC -> PC()
           ComputerType.Server -> Server()
       }
   }
}

fun main() {
   ComputerFactory(ComputerType.PC)
}
             
3 伴生对象创建静态工厂≈

---> 静态工厂替换构造器(Effective Java中的指导原则)

interface Computer{
    val cpu:String
    companion object Factory{
        operator fun invoke(type:ComputerType):Computer{
            return when(type){
                ComputerType.PC->PC()
                ComputerType.Server->Server()
            }
        }
    }
}
fun main() {
    println(Computer.Factory(ComputerType.Server).cpu)
}

Factory 比较习惯这个名字,其实可以省略,直接调用Computer(ComputerType.PC)

4 扩展伴生对象方法

对于经典工厂模式,实际业务中,我们针对是Computer接口的使用,所有的实现细节都做了很好的隐藏。如果我们是第三方类库的方式使用,想进一步改造他的逻辑,Kotlin中的伴生对象同样可以靠他的扩展函数特性,实现这个需求

省略Factory ,新需求,根据cpu类型,判断电脑的类型

/**
 * 模拟第三方库扩展,根据cpu型号判断电脑的类型
 */
fun Computer.Companion.fromCPU(cpu: String): ComputerType? = when (cpu) {
    "Core" -> ComputerType.PC
    "Xeon" -> ComputerType.Server
    else -> null
}
上一篇 下一篇

猜你喜欢

热点阅读