在我们学习面向对象编程的时候,总会出现一些问题,好比以前刚刚写好的代码,上线测试可以、正常运行,突然有一天说要加一个功能,改完之后,发现以前正常运行的功能不能用了,类似这样的问题有好多好多,为了避免类似的事件发生,程序员一定要根据这些原则去开发程序。
我们一个一个来学习,今天来学习7大面向对象设计原则之一,迪米特法则。
迪米特法则:
迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。
迪米特法则的定义是:只与你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。
其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
这个我们这样去理解,就说钱这个东西吧,就我们平时用的支付宝啊,微信啊,我们在付款的时候,不需要再带上一大堆的银行卡啊,网银啊这些了,我们可以直接通过支付宝、微信这些,直接从银行卡中把钱拿出来,然后支付。这里呢,就是用的迪米特法则。
我们原本和银行打交道,存钱取钱,但是银行又多,我们不能把所有的卡都带上,所以呢,微信支付帮我们把这些都弄到一起,然后我们选择用那个银行卡中的钱支付就好了。
迪米特法则的优点:
降低了类之间的耦合度,提高了模块的相对独立性。
由于亲合度降低,从而提高了类的可复用率和系统的扩展性。
迪米特法则的实现:
其实实现我已经说了,就是上面的银行卡的问题。
人呢,有很多银行卡,好比我来说,我有建行卡,农行卡,北京银行卡三个卡,以前出门购买点大件,都得需要带上。
现在呢,我拿上手机就好了,卡仍在家里就行。因为微信支付帮我解决了统一化管理的这个问题。
我呢,只需要知道微信支付的密码,拿好手机就行。微信支付呢,需要和我的那些个银行卡绑定,就好。
我就省的和我的每一张银行卡做沟通。
迪米特法则我们这里就说到这里,大家要好好学习。