zoukankan      html  css  js  c++  java
  • 设计模式值六大原则——迪米特法则(LoD)也称为最少知识原则(LKP)。

    定义:

    迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP)。

    一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的public方法,我就调用这么多,其他的一概不关心。

    含义:

    • 只和朋友交流

    朋友类的定义是这样的:出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。

    下面的代码在方法体内部依赖了其他类,这严重违反迪米特法则

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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);
        }
     
    }

    方法是类的一个行为,类竟然不知道自己的行为与其他类产生了依赖关系,这是不允许的。

    正确的做法是:

    1
    2
    3
    4
    5
    6
    7
    public class Teacher {
     
        public void commond(GroupLeader groupLeader) {
            groupLeader.countGirls();
        }
     
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class GroupLeader {
     
        private List<Girl> listGirls;
     
        public GroupLeader(List<Girl> _listGirls) {
            this.listGirls = _listGirls;
        }
     
        public void countGirls() {
            System.out.println("女生数量是:" + listGirls.size());
        }
     
    }

    注意:一个类只和朋友交流,不与陌生类交流,不要出现getA().getB().getC().getD()这种情况(在一种极端情况下允许出现 这种访问,即每一个点号后面的返回类型都相同),类与类之间的关系是建立在类间的,而不是方法间,因此一个方法尽量不引入一个类中不存在的对象,当 然,JDK API提供的类除外。

    • 朋友间也是有距离的

    一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。因此,为了保持朋友类间的距离,在设计时需要反复 衡量:是否还可以再减少public方法和属性,是否可以修改为private、package-private(包类型,在类、方法、变量前不加访问权 限,则默认为包类型)、protected等访问权限,是否可以加上final关键字等。

    注意:迪米特法则要求类“羞涩”一点,尽量不要对外公布太多的public方法和非静态的public变量,尽量内敛,多使用private、package-private、protected等访问权限。

    • 是自己的就是自己的

    如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,就放置在本类中。

    • 谨慎使用Serializable

    最后,迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用率才可以提高。

    源自:http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793000.html

  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/jiandankuaile/p/4533030.html
Copyright © 2011-2022 走看看