设计原则——迪米特原则

1.全称

  • Least Knowledge Principle
    缩写为:LKP

2.解释

  • 迪米特法则又叫作最少知道原则
  • 只与你的直接朋友交谈,不跟“陌生人”说话
  • 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。

3.接口隔离原则的实现方法

1.场景:买手机
  • 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)
英华达工厂已完成小米品牌手机的生产
小米之家小米手机已到货
小明通过小米之家买了一部小米手机

4.迪米特法则的优点

  1. 降低了类之间的耦合度,提高了模块的相对独立性。

  2. 由于亲合度降低,从而提高了类的可复用率和系统的扩展性。

  3. 但是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值