迪米特法则(LOD)规定了:不应该和陌生人打交道
具体解释为:如果两个类直接无需直接通信,那就不应该发生直接的相互调用,可以通过第三方转发该调用。目的是为了降低类的耦合度,提升类之间的独立性
优点:
- 降低类之间的耦合,提升类之间的独立性
- 提高可复用性和扩展性
实现方法:
- 在创建类的时候,应该尽量创建弱耦合的类,耦合越弱,则其可复用性越高
- 类中的变量,其访问权限越低越好
- 不直接暴露变了,而应该提供set/get方法
- 谨慎使用序列化(Serializable)
反例:明星和粉丝直接见面,这违反了迪米特法则
public static void main(String[] args) {Fan fan = new Fan();fan.meeting(); // 刘亦菲与粉丝见面啦~// 明星类直接出现在对应的方法中,违反了迪米特法则的不与陌生人打交道的原则}// 明星类static class Start{String name;Start(String name){this.name = name;}}// 粉丝static class Fan{public void meeting(){Start start = new Start("刘亦菲");System.out.println(start.name+"与粉丝见面啦~");}}
正例:明星和粉丝不应该直接见面,应该通过经纪人去安排
public static void main(String[] args) {// 创建明星和他对应的经纪人Agent agent = new Agent(new Start("刘亦菲"));// 创建粉丝~Fan fan = new Fan();fan.setName("张三");// 由经纪人安排明星和粉丝见面agent.meeting(fan); // 刘亦菲与张三粉丝见面啦~}// 明星类static class Start{String name;Start(String name){this.name = name;}}// 经纪人static class Agent{Start start;Agent(Start start){this.start = start;}public void meeting(Fan fan){System.out.println(start.name+"与"+fan.getName()+"粉丝见面啦~");}}// 粉丝static class Fan{String name;public void setName(String name) {this.name = name;}public String getName() {return name;}}
