Python学习——设计模式

这篇博客探讨了Python编程中的两种重要设计模式——工厂模式和单例模式,并介绍了如何将它们结合使用,以提高代码的组织和复用性。

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

工厂模式

#适用于创建多个类对象的情况,需要定义一个创建类,里面含有创建类的模块
class CarFactory:
    def create_car(self,brand):
        if brand == "宝马":
            return BMW()    #创建一个类的实例对象返回
        elif brand == "奔驰":
            return Benz()
        elif brand == "比亚迪":
            return BYD()
        else:
            print("未知品牌")
            return 0
class BMW():
    pass
class Benz():
    pass
class BYD():
    pass

car=CarFactory()    #car作为工厂类的一个中间变量来进行brand导入创建类
c1=car.create_car("宝马")     #返回的实例对象赋给变量
c2=car.create_car("奔驰")
print(c1)
print(c2)

单例模式

#需要其他函数时添加即可,基本的单例创建框架不变
class MySingleton:
    __obj = None    #单例创建的对象会永久储存在__obj里
    __initial_flag = True   #使得初始化操作不论导入几次都只会运行一次

    def __new__(cls, *args, **kwargs):
        if cls.__obj == None:   #确定单例对象未被创建时才会进行创建
            cls.__obj = object.__new__(cls)     #创建单例的新对象以后永久储存,且不会在创建新的
        return cls.__obj    #返回创建的实例对象

    def __init__(self,name):
        if MySingleton.__initial_flag:#初始化未运行过时才能运行
            print("初始化进行中...")
            self.name = name
            MySingleton.__initial_flag = False  #确保if语句结果为False,初始化也只进行一次

a=MySingleton("aaa")
print(a)
b=MySingleton("bbb")
print(b)
'''
初始化进行中...
<__main__.MySingleton object at 0x0000023C7AB93310>
<__main__.MySingleton object at 0x0000023C7AB93310>
只运行一次初始化,且无论创建几次都只会生成一个对象
'''

结合应用(工厂+单例)

class CarFactory():     #工厂类的单例创建模式,使得工厂类的实例对象只能创建一个
    __obj = None
    __initial_flag = True
    def __init__(self):
        if CarFactory.__initial_flag:
            print("初始化中...")
            CarFactory.__initial_flag=False

    def __new__(cls, *args, **kwargs):
        if cls.__obj == None:
            cls.__obj=object.__new__(cls)
        return cls.__obj
    '''
    这些可以保证Carfactory的定义和初始化只会进行一次
    '''

    def create_car(self, brand):
        if brand == "宝马":
            return BMW()
        elif brand == "奔驰":
            return Benz()
        elif brand == "比亚迪":
            return BYD()

class BMW():
    pass

class Benz():
    pass

class BYD():
    pass

car=CarFactory()
c1=car.create_car("宝马")
c2=car.create_car("比亚迪")
print(c1)
print(c2)
print(">>>>>>")
car2=CarFactory()   #因为工厂类只允许创建一个对象,所以car2与car1是同一个对象
print(car)
print(car2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值