Python基础知识 2022-11-16 ★ 小结 114-115 设计模式

设计模式_工厂模式实现

设计模式是面向对象语言特有的内容,使我们在面临某一类问题的时候固定的做法,设计模式有很多种,流行的:GOF(group of four)23种设计模式
初学者,两个最常用的模式:工厂模式、单例模式
工厂模式:实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一管理和控制

#测试工厂模式  
  
class CarFactory:  
    def create_car(self, brand):  
        if brand == "奔驰":  
            return Benz()  
        elif brand == "宝马":  
            return BMW()  
        elif brand == "比亚迪":  
            return BYD()  
        else:  
            return "未知品牌无法创建"  
  
class Benz:  
    pass  
  
class BMW:  
    pass  
  
class BYD:  
    pass  
  
factory = CarFactory()  
c1 = factory.create_car("奔驰")  
c2 = factory.create_car("比亚迪")

设计模式_单例模式实现

单例模式 singleton pattern
核心作用:确保一个类只有一个实例,提供一个访问该实例的全局访问点
单例模式只生产一个实例对象,减少了对系统资源的开销。当一个对象的产生需要比较多资源,如读取配置文件、产生其他依赖对象时,可以产生一个单利对象,然后永久驻留在内存中,极大降低开销

#测试单例模式  
  
class MySingleton:  
  
    __obj = None # 类属性,建立的类对象就用这个保存起来  
    __init_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.__init_flag:  
            print("init...")  
            self.name = name  
            MySingleton.__init_flag = False  
a = MySingleton("aa")  
b = MySingleton("bb")  
print(a)  
print(b)

改写工厂模式为单例模式

#测试工厂模式和单利模式的整合使用  
  
class CarFactory:  
  
    __obj = None # 类属性,建立的类对象就用这个保存起来  
    __init_flag = True  
  
    def create_car(self, brand):  
        if brand == "奔驰":  
            return Benz()  
        elif brand == "宝马":  
            return BMW()  
        elif brand == "比亚迪":  
            return BYD()  
        else:  
            return "未知品牌无法创建"  
  
    def __new__(cls, *args, **kwargs):  
        if cls.__obj == None: # 判断当前类对象的类属性是不是空的  
            cls.__obj = object.__new__(cls)  
  
        return cls.__obj  
  
    def __init__(self):  
        if CarFactory.__init_flag:  
            print("init...")  
            CarFactory.__init_flag = False  
  
class Benz:  
    pass  
  
class BMW:  
    pass  
  
class BYD:  
    pass  
  
factory = CarFactory()  
c1 = factory.create_car("奔驰")  
c2 = factory.create_car("比亚迪")  
  
factory2 = CarFactory()  
print(factory)  
print(factory2)

我的小结:单例模式的一种写法,先建立一个空对象__obj用于储存之后建立的实例对象,之后建立的所有实例对象都是这一个地址;再建立一个init flag,为了不用每次都进行重复的属性赋值,只要init一次之后就不再重复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值