简单工厂模式
工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品;在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的。
从软件开发的角度来说,这样就有效的降低了模块之间的耦合。
简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。
class car:
'''interface as Product'''
def drive(self):
pass
class BMW(car):
'''Concrete Product'''
def __init__(self,carname):
self.__name=carname
def drive(self):
print("Drive the BMW as "+self.__name)
class Benz(car):
'''Concrete Product'''
def __init__(self,carname):
self.__name=carname
def drive(self):
print("Drive the Benz as "+self.__name)
class driver:
'''Factory also called Creator'''
def driverCar(self,name):
if name=="BMW":
return BMW("BMW")
elif name=="Benz":
return Benz("Benz")
carname=input("please input BMW Benz :")
dier=driver()
d=dier.driverCar(carname)
d.drive()
单例模式
python的单例模式,所谓单例模式就是一个类只能创建一个实例化。
哪些地方需要用到单例模式,其实想一想有很多,比如
1.Python的logger就是一个单例模式,用以日志记录
2.Windows的资源管理器是一个单例模式
3.线程池,数据库连接池等资源池一般也用单例模式
4.网站计数器
当每个实例都会占用资源,而且实例初始化会影响性能,这个时候就可以考虑使用单例模式,它给我们带来的好处是只有一个实例占用资源,并且只需初始化一次
#通过装饰器实现单例模式
def singleton(cls, *args, **kw):
instances = {} #类变量字典
def _singleton():
#判断 cls 是否 存在字典中
if cls not in instances:
#如果不在字典中,则添加进来
instances[cls] = cls(*args, **kw)
#在的话就return返回
return instances[cls]
return _singleton
@singleton #b=singleton(a)() 等同于 @singleton
class a:
def shwo(self):
print("showshow")
a1=a() #实例化对象1
a2=a() #实例化对象2
print(a1) #如果不是单例模式创建,这个地方打印两次结果不同
print(a2)
a1.shwo()
a2.shwo()