Python设计模式-工厂方法模式

本文深入讲解工厂方法模式,探讨其应用场景、优势与局限性。通过具体案例,展示如何利用该模式实现对象创建与使用的分离,遵循开闭原则,增强代码的可扩展性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂方法模式(Simple Factory Pattern)

定义一个用于创建对象的接口,让子类决定将哪一个类实例化,让一个类的实例化延迟到其子类。

工厂方法模式何时用

需要动态创建同一基类的不同对象时使用。

工厂方法模式好处

  1. 实现了对象创建和使用的分离;
  2. 如何创建这个对象的细节则完全封装在具体工厂内部;
  3. 在系统中加入新产品时,完全符合开闭原则。

工厂方法模式缺陷

  1. 系统中类的个数将成对增加,在一定程度上增加了系统的复杂度;
  2. 会给系统带来一些额外的开销,增加了系统的抽象性和理解难度。

工厂方法模式的代码实现

业务需求

有一个汽车厂商生产两种车辆,根据用户需求提供不同的车型。用户刚好有两种需求对应这两种车型:

  1. 需求:只买贵的,不买对的
  2. 需求:经济、安全、实用

设计思路

  1. 定义一个名为Car的基类,土豪车CarA和普通车CarB别继承自基类Car;
  2. 工厂基类类CarFactory提供一个名为GetCar接口;
  3. 土豪车CarA和普通车CarB的工厂分别实现基类的GetCar接口,返回具体的车辆。

代码实现

为了实现上述需求,代码如下:

# -*- coding: utf-8 -*-

class Car: # 定义基类

    def __init__(self):
        self.speed = 0

    def run(self):
        print('Speed: ' + str(self.speed))

class CarA(Car):  # 土豪车

    def __init__(self):
        self.speed = 200
        print('I am rich. I can run faster.')

class CarB(Car): # 普通车

    def __init__(self):
        self.speed = 100
        print('I am normal. I can run.')

class CarFactory: # 汽车工厂基类

    def get_car(self): # 工厂方法接口(工厂方法模式的工厂方法应该就是指这个方法)
        pass

class CarAFactory(CarFactory):

    def get_car(self): # 土豪车 实现工厂方法接口
        return CarA()

class CarBFactory(CarFactory):

    def get_car(self): # 普通车 实现工厂方法接口
        return CarB()

if __name__ == '__main__':

    factoryA = CarAFactory()
    factoryB = CarBFactory()
    a = factoryA.get_car()
    a.run()
    b = factoryB.get_car()
    b.run()

结语

此时,如果要新增一种“屌丝车CarC”,则不用修改上述代码中的任何类,只需要按现有接口新增一套就行。解决了简单工厂不符合“开闭原则”的问题。下一篇会介绍抽象工厂模式的相关内容,请继续关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值