简单工厂模式
根据不同条件生产不同功能的类
class op(object):
def get_ans(self):
pass
class Add(op):
def get_ans(self):
return self.a + self.b
class Mul(op):
def get_ans(self):
return self.a * self.b
class Undef(op):
def get_ans(self):
return "UNDEF!"
class Factory(op):
operator = dict()
operator["+"] = Add()
operator["*"] = Mul()
def create_operator(self, ch):
t = self.operator[ch] if ch in self.operator else Undef()
return t
if __name__ == "__main__":
a = int(input())
b = int(input())
op = input()
factory = Factory()
cal = factory.create_operator(op)
cal.a = a
cal.b = b
print(cal.get_ans())
单例模式
单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类 “类 (计算机科学)")必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。
# 非线程安全
class Singleton:
_buff = {}
def __init__(self, name):
self.name = self.name if hasattr(self, 'name') else name
def __new__(cls, *args, **kwargs):
if cls not in cls._buff:
instance = super().__new__(cls)
cls._buff[cls] = instance
return cls._buff[cls]
if __name__ == "__main__":
s1 = Singleton("bar")
s2 = Singleton("zoo")
print(s1.name)
print(s2.name)
# 线程安全
from threading import Lock, Thread
class Singleton:
_buff = {}
_lock = Lock()
def __init__(self, name):
self.name = self.name if hasattr(self, 'name') else name
def __new__(cls, *args, **kwargs):
with cls._lock:
if cls not in cls._buff:
instance = super().__new__(cls)
cls._buff[cls] = instance
return cls._buff[cls]
def test_singleton(name):
print(Singleton(name).name)
if __name__ == "__main__":
process1 = Thread(target=test_singleton, args=("bar",))
process2 = Thread(target=test_singleton, args=("zoo",))
process1.start()
process2.start()