设计模式篇(四)——抽象工厂模式

本文深入解析抽象工厂模式,对比工厂模式,阐述其定义、使用场景、实现要素及优缺点。通过汽车厂实例,展示如何创建抽象工厂类及具体工厂类,实现多类型产品的灵活创建。

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

一、简介

抽象工厂模式(Abstract Factory Pattern) 区别于 工厂模式,后者是单个工厂work for单个或者多个 Product 的实现类,而前者就是单个工厂work for多个抽象工厂的实现类(禁止____!)。
套娃

定义:抽象工厂模式 将工厂类抽象出来,抽出来的类(或者接口)用于创建具体的工厂类。

使用场景:在基于 工厂模式 上,被生产的类型存在多个具体实现类,且单个 工厂类 不能同时实现多个具体类的对象创建,你就可以使用 抽象工厂模式

实现要素:清晰的树形结构。

抽象工厂模式 实际上就是再在工厂模式 的基础上,定义 工厂工厂类,以数量换取解耦,那么最大的缺点就很明显了,那就是类的数量(文件)增多。

二、实现

我们遵循其原则,将 工厂类 抽出一层来,创建 工厂类工厂类,最顶层的 工厂类 我们就称之为 抽象工厂

我们继续以汽车厂为例:

  1. 汽车抽象类和汽车具体类
abstract class Car(val brand: String, val modelNum: String) {
    abstract fun getProductPlace():String
}

class Lynk(modelNum: String) : Car("领克", modelNum) {
    override fun getProductPlace() = "中国"
}

class VM(modelNum: String) : Car("大众", modelNum) {
    override fun getProductPlace() = "德国"
}
  1. 汽车抽象工厂类和汽车工厂类
abstract class CarFactory {
    abstract fun productCar():Car
}

object FactoryProvider {

    @JvmStatic
    fun<F:CarFactory> getFactory(clazz: Class<F>):CarFactory {
        return clazz.newInstance()
    }
}

class Lynk05Factory : CarFactory() {
    override fun productCar(): Car {
        return Lynk("05")
    }
}

class Lynk03Factory:CarFactory(){
    override fun productCar(): Lynk {
        return Lynk("03")
    }
}

class GolfFactory: CarFactory() {
    override fun productCar(): VM {
        return VM("golf")
    }
}
  1. 使用
fun main() {
	val lynk05 = FactoryProvider.getFactory(Lynk05Factory::class.java).productCar()
	val golf = FactoryProvider.getFactory(GolfFactory::class.java).productCar()
}

三、相关源码

找不到……如果有找到的小伙伴,欢迎留言……

四、小结

抽象工厂模式 的应用场景不是很广泛,那是因为在实际开发中,除非是处女座的程序员或者架构师,才是使用该模式,疯狂的解耦解耦解耦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值