迪米特法则
迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP)
只与你的直接朋友交谈,不跟“陌生人”说话
(Talk only to your immediate friends and not to strangers)
总的理解:
如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度
名词解析:
只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系
出现成员变量、方法参数、方法返回值中的类为直接的朋友
出现在局部变量中的类则不是直接的朋友。
实现方法:
注意事项:
1在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。
2在类的结构设计上,尽量降低类成员的访问权限。
3在类的设计上,优先考虑将一个类设置成不变类。
4在对其他类的引用上,将引用其他对象的次数降到最低。
5不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。
6谨慎使用序列化(Serializable)功能。
例子
经纪人是明星的朋友,而粉丝和媒体公司是陌生人
/** * 明星 */ public class Star { private String name; public Star(String name) { this.name = name; } public String getName() { return name; } }
/** * 粉丝 */ public class Fans { private String name; public Fans(String name) { this.name = name; } public String getName() { return name; } }
/** * 媒体公司 */ public class Company { private String name; public Company(String name) { this.name = name; } public String getName() { return name; } }
/** * 经纪人 */ public class Agent { private Star myStar; private Fans myFans; private Company myCompany; public Star getMyStar() { return myStar; } public void setMyStar(Star myStar) { this.myStar = myStar; } public Fans getMyFans() { return myFans; } public void setMyFans(Fans myFans) { this.myFans = myFans; } public Company getMyCompany() { return myCompany; } public void setMyCompany(Company myCompany) { this.myCompany = myCompany; } /** * 经纪人的工作 */ public void meeting(){ System.out.println(myFans.getName()+" 和明星"+myStar.getName()+"粉丝会议"); } /** * 和媒体公司工作 */ public void business(){ System.out.println(myCompany.getName()+" 和明星"+myStar.getName()+"接广告"); } }
测试:
public class DopTest { public static void main(String[] args) { //经济任 Agent agent = new Agent(); agent.setMyStar(new Star("quan")); agent.setMyFans(new Fans("qq")); agent.setMyCompany(new Company("gognsi")); agent.meeting(); agent.business(); } /** * qq 和明星quan粉丝会议 * gognsi 和明星quan接广告 */ }
原文:https://www.cnblogs.com/java-quan/p/13664262.html