迪米特法则(LOD)规定了:不应该和陌生人打交道

    具体解释为:如果两个类直接无需直接通信,那就不应该发生直接的相互调用,可以通过第三方转发该调用。目的是为了降低类的耦合度,提升类之间的独立性

    优点:

    1. 降低类之间的耦合,提升类之间的独立性
    2. 提高可复用性和扩展性

    实现方法:

    1. 在创建类的时候,应该尽量创建弱耦合的类,耦合越弱,则其可复用性越高
    2. 类中的变量,其访问权限越低越好
    3. 不直接暴露变了,而应该提供set/get方法
    4. 谨慎使用序列化(Serializable)

    反例:明星和粉丝直接见面,这违反了迪米特法则

    1. public static void main(String[] args) {
    2. Fan fan = new Fan();
    3. fan.meeting(); // 刘亦菲与粉丝见面啦~
    4. // 明星类直接出现在对应的方法中,违反了迪米特法则的不与陌生人打交道的原则
    5. }
    6. // 明星类
    7. static class Start{
    8. String name;
    9. Start(String name){
    10. this.name = name;
    11. }
    12. }
    13. // 粉丝
    14. static class Fan{
    15. public void meeting(){
    16. Start start = new Start("刘亦菲");
    17. System.out.println(start.name+"与粉丝见面啦~");
    18. }
    19. }

    正例:明星和粉丝不应该直接见面,应该通过经纪人去安排

    1. public static void main(String[] args) {
    2. // 创建明星和他对应的经纪人
    3. Agent agent = new Agent(new Start("刘亦菲"));
    4. // 创建粉丝~
    5. Fan fan = new Fan();
    6. fan.setName("张三");
    7. // 由经纪人安排明星和粉丝见面
    8. agent.meeting(fan); // 刘亦菲与张三粉丝见面啦~
    9. }
    10. // 明星类
    11. static class Start{
    12. String name;
    13. Start(String name){
    14. this.name = name;
    15. }
    16. }
    17. // 经纪人
    18. static class Agent{
    19. Start start;
    20. Agent(Start start){
    21. this.start = start;
    22. }
    23. public void meeting(Fan fan){
    24. System.out.println(start.name+"与"+fan.getName()+"粉丝见面啦~");
    25. }
    26. }
    27. // 粉丝
    28. static class Fan{
    29. String name;
    30. public void setName(String name) {
    31. this.name = name;
    32. }
    33. public String getName() {
    34. return name;
    35. }
    36. }