迪米特法则(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类中去处理。
Electron页面跳转、浏览器打开链接和打开新窗口
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
有使用需要使用GD库,网上很多文章都是记录通过下载一堆文件编译安装,其实在PHP的源码包中,已经有gd的编译源码,只需要简单的执行几个命令就可以安装好gd扩展。
《康熙王朝》是一部非常优秀的电视连续剧,陈道明演的康熙是我觉得最有帝王气魄,让人意犹未尽,本文主要记录一小段非常经典的对白。
《是妈妈是女儿》聚焦母女间未曾言明的爱意,以书信对话的形式呈现出各自的内心独白,表达彼此的牵挂。黄绮珊与希林娜依·高用跨越时空、打开心扉、深情对唱的形式,将天下母女爱的寄语化作心灵的倾诉。黄绮珊的每一句话,每一个字都演绎出了妈妈对女儿的爱,而希林依娜·高把女儿对妈妈的爱由不理解到理解再到感恩演绎得淋漓尽致。
快速生成表格
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,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。