目录
1.简介
最少知识原则(Least Knowledge Priciple),简称LKP。
2.定义
一个对象应该对其他对象有最少的了解。也就是说一个类应该对自己需要耦合或者调用的类知道最少,即提供较少的public方法,至少内部是如何复杂就不是该考虑的了。它还表现为只和最近的对象沟通,最近的对象指的就是出现在成员变量,方法输入输出参数中的类。
3.举例
刘邦有一天问韩信道我能点几个兵,韩信说你只能点一个;刘邦又问,那你能点几个,韩信说至少十个。之后韩信点兵,多多益善的故事就传开了。
public class King {
public void commond(General hanXin) {
hanXin.countSolder();
}
}
public class General {
private List<Solder> listSolders;
public General(List<Solder> _listSolders) {
this.listSolders = _listSolders;
}
public void countSolder(List<Soler> listSolders) {
System.out.println("士兵数量是:" + listSolers.size());
}
}
public class Solder {
}
public class simulator {
public static void main(String[] args) {
List<Solder> listSolders = new ArrayList<>();
for(int i = 0; i < 10; i++) {
listSolders.add(new Solder());
}
King liuBang = new King();
liuBang.commond(new General(listSolders));
}
}
从上面我们可以看到King只依赖了General,Generral只依赖了Solder,这就是LKP。还有种情况就在于...
玩过王者荣耀的朋友都知道,有时候一套连招打出来,效果可以打出1+1>2的效果。比如我最爱的巾帼英雄花木兰,要想打出最快的沉默方式就是121
public class hero {
private void firstSkill() {
System.out.println("空裂斩");
}
private void secondSkill() {
System.out.println("旋舞之华");
}
private void thirdSkill() {
System.out.println("绽放刀锋");
}
public void combo() {
this.firstSkill();
this.secondSkill();
this.firstSkill();
}
}
这样我们不用对外提供121的方法,在恰当的时机直接用combo连招,就会打得敌方措手不及,毫无还手之力。