泉州网站建设怎么收费/广告外链平台
工厂函数(Factory Function)不同于构造函数,工厂函数就是一个普通函数,通常用于创建对象或实例。它的核心思想是通过一个函数来封装对象的创建逻辑,而不是直接使用类的构造函数。工厂函数可以根据输入参数动态地决定创建哪种类型的对象,从而提供更高的灵活性和可扩展性。
工厂函数的特点
-
封装创建逻辑:工厂函数隐藏了对象的创建细节,使得调用者不需要关心对象是如何被创建的。
-
动态创建对象:可以根据输入参数动态决定创建哪种类型的对象。
-
不依赖于类的构造函数:工厂函数通常不直接使用
new
关键字,而是通过内部逻辑来创建对象。 -
可扩展性强:在不修改现有代码的情况下,可以轻松添加新的对象类型。
工厂函数的用途
工厂函数常用于以下场景:
-
当对象的创建逻辑复杂时,可以将创建逻辑封装到工厂函数中,使代码更清晰。
-
当需要根据不同的条件创建不同类型的对象时,工厂函数可以根据输入参数动态选择对象类型。
-
在某些编程语言中,工厂函数可以用于避免直接使用类的构造函数,从而实现更灵活的设计模式。
举例说明:
在某个项目中有大量的redis,一旦Redis服务器发生了变化,比如改了IP地址,项目的每个地方需要配置特别麻烦。所以,就使用了工厂函数。
在database.py中配置:
REDIS_CONFIG = {"host": getenv("REDIS_HOST", "127.0.0.1"),"port": int(getenv("REDIS_PORT", "6379")),"db": int(getenv("REDIS_DB", "0")),"password": getenv("REDIS_PASSWORD", None),"encoding": "utf8","pool_minsize": int(getenv("REDIS_POOL_MINSIZE", "1")),"pool_maxsize": int(getenv("REDIS_POOL_MAXSIZE", "10")),"timeout": int(getenv("REDIS_TIMEOUT", "5"))
}
def get_redis_client(decode_responses: bool = True) -> redis.Redis:"""获取Redis客户端实例Args:decode_responses: 是否自动解码响应数据为字符串Returns:Redis: Redis客户端实例"""return redis.Redis(host=getenv("REDIS_HOST", "172.23.151.30"),port=int(getenv("REDIS_PORT", "6379")),db=int(getenv("REDIS_DB", "0")),password=getenv("REDIS_PASSWORD", ""),socket_timeout=int(getenv("REDIS_TIMEOUT", "5")),socket_connect_timeout=int(getenv("REDIS_TIMEOUT", "5")),pool_minsize=int(getenv("REDIS_POOL_MINSIZE", "1")),pool_maxsize=int(getenv("REDIS_POOL_MAXSIZE", "10")),decode_responses=decode_responses)
在各个文件中生成redis_client :
from config.database import get_redis_client# Redis 客户端配置
redis_client = get_redis_client(decode_responses=True)
或者类中直接初始化:
from config.database import get_redis_clientdef __init__(self):self.model = RecommendationModel()self.redis_client = get_redis_client()
后面直接使用即可: