有些情況(像訂單)會需要多筆記錄連到同個資料結構,為都得到最新數值。
使用多筆副本是種方法,但易缺漏更新而讓資料不一致。

Change Value to Reference
此時將值改為參考就是個好選擇:設定好存放區,在其中建立物件,之後就可從任意處到存放區讀取它。
# Before
class Customer:
def __init__(self, name):
self.name = name
def __repr__(self):
return f"Customer({self.name})"
class Order:
def __init__(self, customer_name):
self.customer = Customer(customer_name)
def print_order_details(self):
print(f"Order for: {self.customer}")
order1 = Order("John Doe")
order2 = Order("John Doe")
# order1.customer 和 order2.customer 是不同的物件
# After
class Customer:
_instances = {}
@staticmethod
def get_instance(name):
if name not in Customer._instances:
Customer._instances[name] = Customer(name)
return Customer._instances[name]
def __init__(self, name):
self.name = name
def __repr__(self):
return f"Customer({self.name})"
class Order:
def __init__(self, customer_name):
self.customer = Customer.get_instance(customer_name)
def print_order_details(self):
print(f"Order for: {self.customer}")
order1 = Order("John Doe")
order2 = Order("John Doe")
# order1.customer 和 order2.customer 是同一個物件