迪米特法则(Law of Demeter,LoD)
简介迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern University)的一个名为迪米特(Demeter)的研究项目,由伊恩·荷兰(Ian Holland)提出,被 UML 创始者之一的布奇(Booch)普及,后来又因为在经典著作《程序员修炼之道》(The Pragmatic Programmer)提及而广为人知。
模型定义
迪米特法则(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)。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。
模型优缺点
优点:
- 降低了类之间的耦合度,提高了模块的相对独立性
- 由于亲合度降低,从而提高了类的可复用率和系统的扩展性
缺点:
- 过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。
模型实现
如果有你、朋友和陌生人三个人需要进行沟通,按照迪米特法则的原则,那么你的类中不要出现陌生人的调用,陌生人中不要存在调用你代码,所以朋友就作为了一个中间量。
package com.company.lawOfDemeter;
public class LawOfDemeter {
public static void main(String[] args) {
Friend friend = new Friend();
friend.setMe(new Me());
friend.setStranger(new Stranger());
friend.play();
}
}
class Me {
public void play() {
System.out.println("我");
}
}
class Friend {
private Me me;
private Stranger stranger;
public void setMe(Me me){
this.me = me;
}
public void setStranger(Stranger stranger){
this.stranger = stranger;
}
public void play(){
this.me.play();
this.stranger.play();
}
}
class Stranger {
public void play() {
System.out.println("陌生人");
}
}
输出结果:
我
陌生人
这样就保持了Me和Stranger类中没有相互的调用,而是都转给了中间者Friend类中去处理。
在使用阿里云RDS中,一般我们出于权限的考虑不会让其他用户直接进行外网访问。所以这里我们就采用Navicat加HTTP通道来访问RDS数据库。
有向图根无向图的最大区别在于有向图是具有方向的,所以在实现上也会有很大的不同。
OpenCV-Python图像类型转换是用cv2.cvtcolor()函数,用于将图像从一个颜色空间转换为另一个颜色空间。它的参数包括输入图像、目标颜色空间和转换方式。例如,将RGB图像转换为灰度图像可以使用cv2.COLOR_RGB2GRAY作为转换方式。
XML实体注入漏洞
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。