工厂模式和单例模式
Posted 智趣智学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂模式和单例模式相关的知识,希望对你有一定的参考价值。
工厂模式用于实现创建者和调用者的分离,通过一个超类抽象化的逻辑接口来创建一个特定的类型对象。
实例:
'''创建一个超类'''
class Person:
def __init__(self):
self.name= None
self.age =None
def getName(self):
return self.name
def getAge(self):
return self.age
'''创建两个子类'''
class man(Person):
def __init__(self,name):
print('hello mr' + name)
class woman(Person):
def __init__(self,name):
print('hi Miss' + name)
'''创建工厂对上述程序进行逻辑封装,在这段封装代码中好多人不理解class Factory这个类里面没有体现任何与超类关联的内容,为什么print(per)可以调用超类中的内容呢?这里的解释是:可能是因为这段程序里没有写__init__这个方法,没写这个方法就意味着题主没有打算重写这个方法,既然是没打算重写,那么就得继承,距离这段程序最近的一个__init__()是class woman(Person)类 所以说只能继承最近的这个类的方法,并且因为这个类是超类的子类,所以变相也就继承了超类的方法,所以可以调用超类中的内容'''
class Factory:
def getPerson(self,name,age):
if age ==18:
return man(name)
if age ==19:
return woman(name)
'''调用上述程序'''
fc = Factory()
per = fc.getPerson('tom',int(input('请输入年龄')))
print(per)
单例模式:
Python中单例模式可以实现一个类只创建一个实例方法,这样的好处是节省系统资源例如下例程序:
改良前:
class Earth:
pass
a = Earth()
b = Earth()
print(id(a))
print(id(b))
打印结果:
22207952
22257456
改良后写法一:
class Earth:
__leishuxing = None
def __new__(cls):
if cls.__leishuxing == None:
cls.__leishuxing== object.__new__(cls)
return cls.__leishuxing
else:
return cls.__lleishuxing
a = Earth()
b = Earth()
print(id(a))
print(id(b))
打印结果:
257273796
257273796
改良后写法二:
class Earth(object):
__leishuxing = None
def __new__(cls):
if not cls.__leishuxing:
cls.__leishuxing= super(Earth, cls).__new__(cls)
return cls.__leishuxing
a = Earth()
b = Earth()
print(id(a))
print(id(b))
以上是关于工厂模式和单例模式的主要内容,如果未能解决你的问题,请参考以下文章
2022-04-04:k8s中kubectl源码用到了哪些设计模式?除了工厂和单例。