设计模式-简单工厂模式


简单工厂模式(Simple Factory Pattern)是一个创建型设计模式,属于工厂方法模式的变种。它定义了一个工厂类,该类负责创建一系列的对象,而无需指定具体的类。简单工厂模式通过一个静态方法来创建对象,这样客户端代码就不需要了解对象的具体类,只需要调用工厂类的工厂方法就可以获得需要的对象。

主要组成部分:

  1. 工厂类(Factory):负责创建具体的对象。它根据客户端请求的参数或条件来决定实例化哪个类的对象。
  2. 产品类(Product):定义了工厂所要生产的产品。不同的具体产品类可以继承或实现该类。
  3. 具体产品类(ConcreteProduct):实现了产品类的具体类,每个产品类都代表一个具体的实例。
  4. 客户端(Client):客户端通过工厂类请求实例化某个具体产品,而不需要直接与具体的产品类交互。

工作原理:

  • 客户端向工厂类请求产品时,工厂类根据传入的参数决定创建哪个具体产品对象,并返回给客户端。
  • 客户端并不知道产品的具体实现,只通过接口与产品交互。

优缺点:

优点

  • 解耦:客户端不需要知道具体的产品类,只需要依赖工厂类,减少了系统的耦合度。
  • 简单性:如果产品种类较少且变化不频繁时,使用简单工厂模式非常方便,代码简单易懂。

缺点

  • 违反单一职责原则:工厂类需要处理创建多个不同产品的逻辑,可能会导致工厂类的代码变得庞大,难以维护。
  • 扩展性差:如果增加新的产品,需要修改工厂类的代码,违反了开闭原则。

示例代码(以简单的汽车为例):

class Car:
    def drive(self):
        raise NotImplementedError()

class Sedan(Car):
    def drive(self):
        return "Driving a sedan"

class SUV(Car):
    def drive(self):
        return "Driving an SUV"

class CarFactory:
    @staticmethod
    def create_car(car_type):
        if car_type == 'sedan':
            return Sedan()
        elif car_type == 'suv':
            return SUV()
        else:
            raise ValueError("Unknown car type")

# 客户端代码
car_type = 'sedan'  # 客户端决定需要哪种类型的车
car = CarFactory.create_car(car_type)
print(car.drive())  # 输出:Driving a sedan

总结:

简单工厂模式适用于产品类型较少、变化不大的情况,但如果产品种类不断增加或变化频繁,可能需要考虑使用工厂方法模式或抽象工厂模式来应对扩展性和维护性问题。


文章标签:

评论(0)