轻松创建对象——简单工厂模式(Python实现)

1. 引言

大家好,又见面了!今天我们要聊的是设计模式中的“万能钥匙”——简单工厂模式。想象一下,如果每次你都得亲自动手创建各种对象,不仅累得像个陀螺,还可能搞得一团糟。别怕,简单工厂模式来拯救你!它就像一个神奇的工厂,可以根据你的需求生产出各种对象。今天,我们就来揭开这个神奇模式的面纱,让你轻松创建对象不再烦恼。准备好了吗?Let’s go!

2. 什么是简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它定义一个工厂类,根据传入的参数决定创建哪一种产品类的实例。简单来说,简单工厂模式就是把创建对象的任务交给一个专门的工厂类,让工厂来决定生产哪种对象,咱们只需安心享用即可。

3. 简单工厂模式的实现

示例一:形状工厂

假如你是个艺术家,需要画各种形状,圆形、方形啥的,你可以用简单工厂模式让工厂帮你搞定这些形状对象:

代码实现
class Shape:
    def draw(self):
        pass

class Circle(Shape):
    def draw(self):
        print("Drawing a Circle")

class Square(Shape):
    def draw(self):
        print("Drawing a Square")

class ShapeFactory:
    @staticmethod
    def create_shape(shape_type):
        if shape_type == "circle":
            return Circle()
        elif shape_type == "square":
            return Square()
        else:
            return None

# 使用示例
factory = ShapeFactory()
shape1 = factory.create_shape("circle")
shape1.draw()  # 输出: Drawing a Circle

shape2 = factory.create_shape("square")
shape2.draw()  # 输出: Drawing a Square
详细代码解析
  • Shape是个接口类,定义了draw方法,咱们所有的形状都要实现它;
  • CircleSquare类分别实现了Shape接口,具体画啥样子它们说了算;
  • ShapeFactory类有个静态方法create_shape,根据传入的形状类型参数创建并返回对应的形状对象;
  • 我们只需通过调用ShapeFactory.create_shape方法并传入形状类型,就能轻松得到相应的形状对象。
示例二:日志记录器工厂

现在你是个开发者,搞个日志系统,你想要不同级别的日志记录器来帮你分门别类记录信息,简单工厂模式也能派上用场:

代码实现
class Logger:
    def log(self, message):
        pass

class InfoLogger(Logger):
    def log(self, message):
        print(f"INFO: {message}")

class ErrorLogger(Logger):
    def log(self, message):
        print(f"ERROR: {message}")

class LoggerFactory:
    @staticmethod
    def create_logger(logger_type):
        if logger_type == "info":
            return InfoLogger()
        elif logger_type == "error":
            return ErrorLogger()
        else:
            return None

# 使用示例
logger_factory = LoggerFactory()
info_logger = logger_factory.create_logger("info")
info_logger.log("This is an informational message.")  # 输出: INFO: This is an informational message.

error_logger = logger_factory.create_logger("error")
error_logger.log("This is an error message.")  # 输出: ERROR: This is an error message.
详细代码解析
  • Logger是个接口类,定义了log方法;
  • InfoLoggerErrorLogger类实现了Logger接口,分别负责记录不同级别的日志;
  • LoggerFactory类的静态方法create_logger根据传入的日志类型参数创建并返回对应的日志记录器对象;
  • 你只需通过调用LoggerFactory.create_logger方法并传入日志类型参数,就能得到相应的日志记录器对象。
示例三:数据库连接工厂

假如你现在是个DBA,需要管理多个数据库连接,简单工厂模式同样能帮你搞定这个问题:

代码实现
class DatabaseConnection:
    def connect(self):
        pass

class MySQLConnection(DatabaseConnection):
    def connect(self):
        print("Connecting to MySQL database...")

class PostgreSQLConnection(DatabaseConnection):
    def connect(self):
        print("Connecting to PostgreSQL database...")

class DatabaseConnectionFactory:
    @staticmethod
    def create_connection(db_type):
        if db_type == "mysql":
            return MySQLConnection()
        elif db_type == "postgresql":
            return PostgreSQLConnection()
        else:
            return None

# 使用示例
db_factory = DatabaseConnectionFactory()
mysql_connection = db_factory.create_connection("mysql")
mysql_connection.connect()  # 输出: Connecting to MySQL database...

postgresql_connection = db_factory.create_connection("postgresql")
postgresql_connection.connect()  # 输出: Connecting to PostgreSQL database...
详细代码解析
  • DatabaseConnection是个接口类,定义了connect方法;
  • MySQLConnectionPostgreSQLConnection类实现了DatabaseConnection接口,分别负责不同数据库的连接;
  • DatabaseConnectionFactory类的静态方法create_connection根据传入的数据库类型参数创建并返回对应的数据库连接对象;
  • 你只需通过调用DatabaseConnectionFactory.create_connection方法并传入数据库类型参数,就能得到相应的数据库连接对象。

4. 简单工厂模式的优缺点

优点
  • 解耦:把对象的创建过程封装在工厂类里,客户端代码只需关心怎么用,不用关心怎么创建;
  • 灵活性:通过工厂类可以灵活地创建不同类型的对象,扩展性杠杠的。
缺点
  • 违背开闭原则:每次新增对象类型,都得改工厂类,比较麻烦;
  • 单一职责问题:工厂类负责创建所有对象,复杂项目里可能会比较臃肿。

6.示意图

图片来源:https://xie.infoq.cn/article/270b6bbfd752d9906bf0a09df

img

7. 总结

简单工厂模式就是这么神奇,它让对象的创建变得简单又高效,适用于各种需要灵活创建对象的场景。虽然它有一些缺点,但在大多数情况下,简单工厂模式依然是个非常实用的设计模式。
希望今天的分享能让大家对简单工厂模式有更深入的理解。如果你在项目中也用到了简单工厂模式,欢迎留言分享你的经验和见解!
在这里插入图片描述

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值