设计模式_工厂模式实现
设计模式是面向对象语言特有的内容,使我们在面临某一类问题的时候固定的做法,设计模式有很多种,流行的: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一次之后就不再重复