zoukankan      html  css  js  c++  java
  • 设计模式--迪米特法则(Lod/LKP)

    迪米特法则:(Law of Demeter, LoD),也称最少知识原则(Least Knowledge Principle, LKP)
    理解:
         假设两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。假设当中一个类须要调用还有一个类的某一个放发的话,能够通过第三者转发这个调用。

    •   仅仅和朋友交流(更准确来讲是:直接的朋友)
    每一个对象都必定会与其它对象有耦合关系,两个对象之间的耦合就成为朋友关系,这样的关系的类型有非常多,如组合、聚合、依赖等。

    朋友类的定义:出如今成员变量、方法的输入输出參数中的类。   而方法体类内部的类不能算。
    •   朋友之间也有间距
    假设朋友把太多的方法或属性暴露给你。则过于亲热。耦合关系变得异常坚固。并且。改动时涉及的面也就越大。变更引起的风险就越大。

    因此,要适时重复衡量:能否够降低public方法和属性,改为private、package-private、protected等訪问权限。及能否够加上finalkeyword。


    看个演示样例:
         以下的代码违反了设计原则:
    public class Teacher {
     
        public void commond(GroupLeader groupLeader) {
            List<Girl> listGirls = new ArrayList<Girl>();
            for (int i = 0; i < 20; i++) {
                listGirls.add(new Girl());
            }
            groupLeader.countGirls(listGirls);
        }
    }

         一个类应该纸盒自己有直接关系的类交流。
    正确的方法例如以下:
    public class Teacher {
     
        public void commond(GroupLeader groupLeader) {
            groupLeader.countGirls();
        }
     
    }
    
    public class GroupLeader {
     
        private List<Girl> listGirls;
     
        public GroupLeader(List<Girl> _listGirls) {
            this.listGirls = _listGirls;
        }
     
        public void countGirls() {
            System.out.println("女生数量是:" + listGirls.size());
        }
     
    }


  • 相关阅读:
    1063. Set Similarity
    A1047. Student List for Course
    A1039. Course List for Student
    最大公约数、素数、分数运算、超长整数计算总结
    A1024. Palindromic Number
    A1023. Have Fun with Numbers
    A1059. Prime Factors
    A1096. Consecutive Factors
    A1078. Hashing
    A1015. Reversible Primes
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5198983.html
Copyright © 2011-2022 走看看