设计模式-工厂模式(Kotlin)

在面向对象语言中,万物皆是对象,如果在需要创建对象的时候直接新建一个对象,就会对该对象耦合严重,如果我们需要更换对象时,就需要对所有新建对象的地方都修改一边,这就违背了开闭原则。因此会使用工厂模式来创建对象,我们可以直接在工厂中创建对象,因此更换对象也可以直接在工厂中进行,这样就达到了与对象解耦的目的,因此,工厂模式最大的优点就是与对象解耦

1,简单工厂模式

简单工厂模式并不属于设计模式的一种,反而更像是一种编程习惯

简单工厂模式包含如下角色

·抽象产品:定义了产品的规范,描述了产品的主要特征和性能

·具体产品:实现或继承了抽象产品的子类

·具体工厂:提供了创建产品的方法,调用中通过调用该方法来获取产品

abstract class Car(){
    abstract fun build()
}

class ChangCheng(): Car(){
    override fun build() {
        println("build changcheng")
    }
}

class ChangAn(): Car(){
    override fun build() {
        println("build changan")
    }
}

class CarFactory{
    fun create(type: String): Car{
        return when(type){
            "changcheng" -> ChangCheng()
            else -> ChangAn()
        }
    }
}

优点

        把对象的创建和使用封开,更加容易拓展

缺点

        新增产品时需要修改工厂类,违背了开闭原则

2,工厂方法模式

工厂方法模式完美的解决了上述缺点,遵循开闭原则

工厂方法模式包含如下角色:

·抽象工厂:提供创建产品的接口,

·具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建

·抽象产品:定义了产品的规范,描述了产品的主要特征和性能

·具体产品:实现或继承了抽象产品的子类

abstract class Car(){
    abstract fun build()
}

interface CarsFactory{
    fun createCar(): Car
}

class ChangChengFactory : CarsFactory{
    override fun createCar(): Car {
        return ChangCheng()
    }
}

class ChangAnFactory: CarsFactory{
    override fun createCar(): Car {
        return ChangAn()
    }
}

class ChangCheng(): Car(){
    override fun build() {
        println("build changcheng")
    }
}

class ChangAn(): Car(){
    override fun build() {
        println("build changan")
    }
}

class Store(val factory: CarsFactory){
    fun create(): Car{
        return factory.createCar()
    }
}

优点

        完美的遵循了开闭原则

缺点

        新增一个产品需要增加几个类,增加了代码的复杂性

3,抽象工厂模式

简单工厂模式和工厂方法模式都是创建一类产品的模式,而抽象工厂模式是创建多个产品的模式,但是模式和工厂方法模式相同,只不过抽象工厂需要去写多个产品方法。只需仿照上面的部分进行写就好了

你可能感兴趣的:(Kotlin-设计模式,设计模式,java,开发语言,1024程序员节)