python中的工厂模式(附示例)

一、什么是工厂方法(Factory Method)?

工厂方法是一种创建对象的设计模式,它把“创建对象的逻辑”封装在一个方法里,而不是每次都用 __init__ 去手动创建。

我们可以把它理解为:

你不需要关心对象怎么造,只需要告诉我你要什么,我来生产一个给你。

二、为什么要用工厂方法?

直接使用 __init__ 方法来创建对象虽然简单,但当对象的创建逻辑复杂或需要根据不同条件分支时,就会显得冗余和混乱。使用工厂方法可以带来以下好处:

        a.封装对象创建逻辑,让主流程更清晰

        b.统一创建入口,便于维护和扩展

        c.替代繁杂的 if-else,避免逻辑分散

        d.方便在项目中复用、测试和重构

三、什么是@classmethod?

@classmethod 是一种类方法修饰符,它的第一个参数是 cls,用于操作类本身。我们经常用它来实现“工厂方法”,将不同对象的创建逻辑封装成类方法。可以在不创建实例的情况下调用。

在实际开发中,@classmethod 常被用来实现工厂方法模式(Factory Method Pattern)
根据不同的参数或上下文,创建并返回不同配置的类实例。

四、工厂方法的使用示例

场景:权限系统中的用户创建

项目中有三种用户类型:普通用户(user)、管理员(admin)、游客(guest)

我们需要根据用户身份创建对应的对象,并初始化不同的权限。

 代码示例

step1.定义 User 类和工厂方法

class User:
    def __init__(self, name, role, permissions):
        self.name = name
        self.role = role
        self.permissions = permissions

    @classmethod
    def create_admin(cls, name):
        return cls(name, "admin", ["read", "write", "delete"])

    @classmethod
    def create_user(cls, name):
        return cls(name, "user", ["read", "write"])

    @classmethod
    def create_guest(cls, name):
        return cls(name, "guest", ["read"])

user_factory_map = {
    "admin": User.create_admin,
    "user": User.create_user,
    "guest": User.create_guest,
}

step2.用 Flask 实现接口

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/register', methods=['POST'])
def register():
    data = request.get_json()
    name = data.get("name")
    role = data.get("role")

    if not name or not role:
        return jsonify({"error": "name and role are required"}), 400

    # 直接通过工厂映射获取创建方法
    create_func = user_factory_map.get(role)
    if not create_func:
        return jsonify({"error": "invalid role"}), 400

    user = create_func(name)

    return jsonify({
        "name": user.name,
        "role": user.role,
        "permissions": user.permissions
    })

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000, debug=True)

请求示例

payload = {
    "name": "APPLE",
    "role": "admin"
}

响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重生之我又是程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值