用空对象来取代客户端对Null对象的检查
优点:
- 能够实现对Null对象的自定义控制
- 加强系统的稳定性
Demo
"""
空对象模式
"""
from abc import ABCMeta, abstractmethod
class AbstractCustomer(metaclass=ABCMeta):
@abstractmethod
def is_nil(self):
pass
def get_name(self):
pass
class RealCustomer(AbstractCustomer):
def __init__(self, name):
self.name = name
def is_nil(self):
return False
def get_name(self):
return self.name
class NullCustomer(AbstractCustomer):
def is_nil(self):
return True
def get_name(self):
return 'Not Available in Customer Database'
class CustomerFactory:
names = {"Rob", "Joe", "Julie"}
@classmethod
def get_customer(cls, name):
for value in cls.names:
if str.upper(value) == str.upper(name):
return RealCustomer(name)
return NullCustomer()
if __name__ == '__main__':
c_1 = CustomerFactory.get_customer('rob')
c_2 = CustomerFactory.get_customer('ccc')
print(c_1.get_name())
print(c_2.get_name())