什么是工厂模式

工厂模式是用来创建对象的一种最常用的设计模式。我们不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂。工厂模式根据抽象程度的不同可以分为

  • 简单工厂
  • 工厂方法
  • 抽象工厂

生活中的案例:
*想象一下你的女朋友生日要到了,你想知道她想要什么,于是你问她:“亲爱的,生日要到了你想要什么生日礼物啊?”
正巧你女朋友是个猫奴,最经迷上了抖音上的一只超级可爱的苏格兰折耳猫,她也很想要一只网红同款猫。
于是她回答你说:“亲爱的,我想要一只动物。”
你心平气和的问她:“想要什么动物啊?”
你女友说:“我想要猫科动物。”
这时你内心就纳闷了,猫科动物有老虎,狮子,豹子,猞猁,还有各种小猫,我哪里知道你要什么?
于是你问女友:“你要哪种猫科动物啊?”
“笨死了,还要哪种,肯定是小猫咪啊,难道我们家还能像迪拜土豪那样养老虎啊!”你女朋友答道。
“好好, 那你想要哪个品种的猫呢?”你问道
“我想要外国的品种, 不要中国的土猫” 你女友傲娇的回答到。
这时你已经快奔溃了,作为程序员的你再也受不了这种挤牙膏式的提问,于是你哀求到:“亲爱的,你就直接告诉我你到底想要哪个品种,哪个颜色,多大的猫?”
你女友想了想抖音的那只猫,回答道:“我想要一只灰色的,不超过1岁的苏格兰短耳猫!”
于是,你在女友生日当天到全国最大的宠物批发市场里面去,挑了一只“灰色的,不超过1岁的苏格兰短耳猫”回家送给了你女友, 圆了你女友拥有网红同款猫的梦想!*

上面中你最终买到并送给女友那只猫可以被看作是一个实例,宠物批发市场可以看作是一个工厂,我们可以认为它是一个函数,这个工厂函数里面有着各种各样的动物,那么你是如何获取到实例的呢?因为你给宠物批发市场传递了正确的参数,**“color: 灰色”,“age: 不超过1岁”,”breed:苏格兰短耳”,“category:
猫”**

前面的对话中, 你女朋友回答“动物”,“猫科动物”,“国外的品种”让你不明白她到底想要什么,就是因为她说得太抽象了。她回答的是一大类动物的共有特征而不是具体动物,这种将复杂事物的一个或多个共有特征抽取出来的思维过程就是抽象。

既然已经明白了抽象的概念,下面我们来看一下之前提到的工厂模式的三种实现方法: 简单工厂模式、工厂方法模式、抽象工厂模式。

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
工厂模式是一种设计模式,它提供了一种创建对象的最佳方式,同时隐藏了创建对象的实现细节。在工厂模式中,我们不会向客户端暴露创建对象的逻辑,而是提供一个接口来创建对象。一个实现了工厂模式的类通常被称为工厂类。 举个例子,假设你现在在设计一个汽车制造系统,你需要根据客户的需求生产不同类型的汽车(比如轿车、SUV、卡车等等)。在这种情况下,你可以使用工厂模式来创建不同类型的汽车对象。你可以创建一个工厂类,该类具有一个方法,该方法接受一个字符串参数,并根据该字符串参数创建不同类型的汽车对象。这样,你就可以把创建对象的实现细节隐藏起来,只向客户端提供一个简单的接口来创建对象。 下面是一个简单的工厂模式的例子,我们创建了一个名为`CarFactory`的类,该类具有一个方法`create_car`,该方法接受一个字符串参数`car_type`,并根据该参数创建不同类型的汽车对象: ```python class Car: def __init__(self, model, color): self.model = model self.color = color class CarFactory: @staticmethod def create_car(car_type): if car_type == "SUV": return Car("SUV", "red") elif car_type == "sedan": return Car("sedan", "blue") elif car_type == "truck": return Car("truck", "green") else: raise ValueError(f"Unknown car type {car_type}") # Example usage: suv = CarFactory.create_car("SUV") print(suv.model) # 输出:SUV print(suv.color) # 输出:red ``` 在上述代码中,我们创建了一个名为`Car`的汽车类,该类具有两个属性`model`和`color`。接着我们创建了一个名为`CarFactory`的工厂类,该类具有一个静态方法`create_car`,该方法接受一个字符串参数`car_type`,并根据该参数创建不同类型的汽车对象。在这个例子中,我们创建了三种类型的汽车:SUV、轿车和卡车。当客户端调用`CarFactory.create_car`方法时,工厂类会根据传入的参数创建不同类型的汽车对象。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值