工厂模式
class Operation:
def __init__(self, num1=0, num2=0):
self.num1 = num1
self.num2 = num2
def calculate(self):
pass
class Add(Operation):
def calculate(self):
return self.num1 + self.num2
class Sub(Operation):
def calculate(self):
return self.num1 - self.num2
class Mul(Operation):
def calculate(self):
return self.num1 * self.num2
class Div(Operation):
def calculate(self):
return self.num1 / self.num2
class OperationFactory:
def get_opt(self, opt):
if opt == '+':
return Add()
elif opt == '-':
return Sub()
elif opt == '*':
return Mul()
elif opt == "/":
return Div()
if __name__ == '__main__':
fac = OperationFactory()
opt_obj = fac.get_opt("+")
opt_obj.num1 = 1
opt_obj.num2 = 2
print(opt_obj.calculate())
单例模式
import threading
import time
class Singleton(object):
_instance_lock = threading.Lock()
def __init__(self):
time.sleep(1)
def __new__(cls, *args, **kwargs):
# self是类(Class)实例化对象,cls就是类(或子类)本身,取决于调用的是那个类。
# 如果类属性__instance的值为None,
# 那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时
# 能够知道之前已经创建过对象了,这样就保证了只有1个对象
if not hasattr(Singleton, "_instance"):
with Singleton._instance_lock:
if not hasattr(Singleton, "_instance"):
Singleton._instance = object.__new__(cls)
return Singleton._instance
def task(arg):
obj = Singleton()
print(obj)
for i in range(10):
t = threading.Thread(target=task, args=[i, ])
t.start()