python里面的工厂模式

本文介绍了工厂模式这一设计模式的概念及其应用场景,通过一个具体的手机工厂模式实例,展示了如何使用Python实现不同品牌的手机对象创建过程。

工厂模式
工厂模式:是一个在软件开发中用来创建对象的设计模型。
使用工厂模式的应用场景:当不知道用户想要创建什么样的对象时可以使用🏭工厂模式。
一个手机工厂模式

class Phone(object):
    def Picture(self):
        print("照相")
    def Call(self):
        print("打电话")

class Xiaomi(Phone):
    def Picture(self):
        print("照出一朵花❀")
    def Call(self):
        print("和父母打电话📞")
class Huawei(Phone):
    def Picture(self):
        print("照出美食🧀,美景🐱🐕🚹")
    def Call(self):
        print("能通话2个小时")
class Sanxing(Phone):
    def Picture(self):
        print("照出🌇夕阳 一副夕阳画")
    def Call(self):
        print("和朋友聊天📞")

class PhoneFactory(object):
    def new_phone(self,name):
        if name == "Xiaomi":
            xm=Xiaomi()
            return xm
        if name == "Huawei":
            hw=Huawei()
            return hw
        if name == "Sanxing":
            sx=Sanxing()
            return sx

class PhoneStore(object):
    def __init__(self,factory):
        self.factory=factory
    def order(self,name):
        new_phone=self.factory.new_phone(name)
        return new_phone

phone_factory=PhoneFactory()
phone_store=PhoneStore(phone_factory)
phone=phone_store.order('Xiaomi')
phone.Picture()
phone.Call()
<think>嗯,用户想了解Python中的工厂模式及其与普通模式的区别。首先,我需要回顾之前提供的引用内容,特别是引用1、2、3,里面提到了工厂方法模式和抽象工厂模式的区别,以及具体的代码示例。用户的问题主要集中在定义和区别上,所以需要先明确工厂模式的概念,然后对比普通模式。首先,工厂模式是一种创建型设计模式,用于对象的创建,而普通模式可能直接使用new或者构造函数来实例化对象。工厂模式的核心是将对象的创建和使用分离,提高灵活性和可维护性。根据引用[1],工厂方法模式通过定义接口来创建对象,子类决定实例化的类。而引用[3]中的代码示例展示了如何用抽象基类和具体工厂类来实现。接下来要区分工厂模式和普通模式的区别。普通模式直接创建对象,导致代码耦合度高,而工厂模式通过工厂类封装创建逻辑,降低耦合。比如,当需要更换产品时,只需修改工厂类,而不影响客户端代码。引用[2]提到抽象工厂模式可能使用工厂方法来实现,这说明了不同工厂模式之间的关系。然后要考虑用户可能的疑问点,比如为什么使用工厂模式,有什么好处,以及不同工厂模式之间的区别。需要结合代码示例来说明,比如引用[3]中的可口可乐和百事可乐工厂,客户端只需要知道工厂类,而不需要知道具体产品的实现细节。 另外,用户可能对普通模式的理解不够,需要举例说明普通模式直接实例化对象的情况,比如直接调用Kekou(),而工厂模式则通过工厂类的方法来创建,如kfc.make_coke()。这样可以解耦客户端代码和具体产品类。最后,要确保回答结构清晰,分点说明定义和区别,并引用提供的资料来支持观点。同时,生成的相关问题需要与工厂模式相关,比如具体实现方式、与其他模式的区别、适用场景等,帮助用户进一步学习。</think>### Python工厂模式详解 #### 一、工厂模式定义 工厂模式是一种**创建型设计模式**,通过定义接口来创建对象,但让子类决定实例化哪个类[^1]。其核心特征包括: 1. 将对象创建与使用分离 2. 通过抽象层实现松耦合 3. 支持扩展新的产品类型 **数学表达**: 设$C$为产品类集合,工厂模式可表示为: $$ \exists F \subseteq C \times M, \quad \forall c \in C, \exists! m \in M \text{ s.t. } (c,m) \in F $$ 其中$M$为工厂方法集合 #### 二、与普通模式对比 | 维度 | 普通模式 | 工厂模式 | |--------------|-----------------------------------|-----------------------------------| | **对象创建** | 直接实例化具体类 | 通过工厂方法创建对象 | | **耦合度** | 客户端代码与具体类高度耦合 | 客户端仅依赖接口,低耦合[^1] | | **扩展性** | 修改需改动客户端代码 | 新增产品只需扩展工厂类 | | **代码复用** | 重复创建逻辑 | 集中管理创建逻辑 | #### 三、Python实现示例 ```python from abc import ABC, abstractmethod # 产品接口 class Vehicle(ABC): @abstractmethod def run(self): pass # 具体产品 class Car(Vehicle): def run(self): print("汽车行驶中...") class Bicycle(Vehicle): def run(self): print("自行车骑行中...") # 工厂接口 class VehicleFactory(ABC): @abstractmethod def create(self) -> Vehicle: pass # 具体工厂 class CarFactory(VehicleFactory): def create(self): return Car() class BicycleFactory(VehicleFactory): def create(self): return Bicycle() # 客户端使用 factory = CarFactory() vehicle = factory.create() vehicle.run() # 输出: 汽车行驶中... ``` #### 四、核心优势分析 1. **解耦特性** 通过工厂类隔离创建逻辑,客户端无需知晓具体类名,符合迪米特法则[^3] 2. **扩展机制** 新增产品类型时,只需: $$ \text{新产品类} + \text{新工厂类} $$ 无需修改现有代码(开闭原则) 3. **类型安全** 使用抽象基类强制实现接口规范,避免类型错误[^3] #### 五、适用场景 1. 需要创建多个相似对象家族 2. 系统需要独立于产品的创建、组合和表示 3. 需要灵活切换不同实现方案 4. 产品类型可能动态扩展 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值