Python设计模式-简单工厂模式

简单工厂模式(Simple Factory Pattern)

工厂模式是一个用来创建对象的设计模式

简单工厂模式何时用

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

简单工厂模式好处

  1. 实现了对象创建和使用的分离;
  2. 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。

简单工厂模式缺陷

  1. 由于工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都要受到影响;
  2. 一旦添加新产品就不得不修改工厂逻辑,违反了开闭原则

简单工厂模式的代码实现

业务需求

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

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

设计思路

  1. 定义一个名为Car的基类,土豪车CarA和普通车CarB别继承自基类Car;
  2. 工厂类CarFactory提供一个名为GetCar的方法来返回相应车辆;
  3. 用户通过工厂类得到自己想要的车辆。

代码实现

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

# -*- 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, kind):
        if kind == 'expensive': # 贵的则生产 土豪车
            return CarA()
        if kind == 'normal': # 一般的生产 普通车
            return CarB()

if __name__ == '__main__':

	# 业务逻辑中已经不生产具体的车辆了,实现了解耦
    factory = CarFactory()
    b = factory.get_car('normal')
    b.run()
    a = factory.get_car('expensive')
    a.run()

结语

工厂模式有三兄弟,本文中的简单工厂模式是其中的小弟,除此之外还有工厂方法模式抽象工厂模式两位大佬。简单工厂模式中存在的缺陷,会在另两中模式中得到解决,请关注我后续的文章。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值