LKP
1.小明想买一部小米手机
2.小明知道小米之家有卖的
3.小米之家告知小明没有货了,需要从英华达工厂进货,有了货,再来买
如果没有迪米特法则的约束,小明就需要同时和小米之家
、英华达
工厂两个对象进行打交道,这样,对象之间的耦合度就太高了
如果遵循迪米特法则的约束,软件程序中就会出现大量的中间类,使得模块之间的通信效率降低
class Person:
def __init__(self, name, branch):
self.name = name
self.branch = branch
def buy(self, business):
"""买手机"""
phone = business.purchase(self.branch)
print(f"{self.name}通过{business.name}买了一部{phone.branch}手机")
class Business:
def __init__(self, name, factory=None):
self.name = name
self.factory = factory
def purchase(self, branch):
"""进货"""
phone = self.factory.product(branch)
print(f"{self.name}{phone.branch}手机已到货")
return phone
class Phone:
branch = None
class Factory:
def __init__(self, name):
self.name = name
def product(self, branch):
"""生产"""
print(f"{self.name}工厂已完成{branch}品牌手机的生产")
phone = Phone
phone.branch = branch
return phone
if __name__ == '__main__':
# 3.英华达工厂接到京东商城的订单,立即生产了一批小米手机
f = Factory("英华达")
# 2.小米之家找到英华达工厂进了一批小米手机
b = Business("小米之家", f)
# 1.小明想买一部小米手机,找到了小米之家
p = Person("小明", "小米")
p.buy(b)
英华达工厂已完成小米品牌手机的生产
小米之家小米手机已到货
小明通过小米之家买了一部小米手机
降低了类之间的耦合度,提高了模块的相对独立性。
由于亲合度降低,从而提高了类的可复用率和系统的扩展性。
但是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。