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

avatar
作者
猴君
阅读量:1

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. 总结

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

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!