用空对象来取代客户端对Null对象的检查
优点:
- 能够实现对Null对象的自定义控制
- 加强系统的稳定性
Demo
"""空对象模式"""from abc import ABCMeta, abstractmethodclass AbstractCustomer(metaclass=ABCMeta):@abstractmethoddef is_nil(self):passdef get_name(self):passclass RealCustomer(AbstractCustomer):def __init__(self, name):self.name = namedef is_nil(self):return Falsedef get_name(self):return self.nameclass NullCustomer(AbstractCustomer):def is_nil(self):return Truedef get_name(self):return 'Not Available in Customer Database'class CustomerFactory:names = {"Rob", "Joe", "Julie"}@classmethoddef 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())
