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

本文详细介绍了工厂模式在面向对象编程中的三种形态:简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式虽方便但违反了开闭原则,而工厂方法模式则通过接口实现了更好的解耦,遵循了开闭原则。抽象工厂模式则进一步扩展,用于创建多个相关或相互依赖的对象。每种模式都有其适用场景和优缺点,为软件设计提供了灵活性和可扩展性的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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,抽象工厂模式

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值