zoukankan      html  css  js  c++  java
  • 设计模式之迪米特法则

    迪米特法则(Law of Demeter,简称LoD) 低耦合,一个对象应该对其他对象保持最少的了解(中介者模式就是这个的应用)

    • 核心思想: 类间解耦。
    • 通俗来讲: 一个类对自己依赖的类知道的越少越好。自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的。

    错误示范:

    public class Teacher {
        public void command(){
            //耦合了student类
            List<Student> students = new ArrayList<Student>();
            for(int i=0; i<20; i++){
                students.add(new Student());
            }
            
            //耦合了studentleader类
            StudentLeader leader = new StudentLeader();
            System.out.println("清点人数完毕,总共有:"+leader.counts(students)+"人");
            
        }
    }
    
    public class Student {
    
    }
    
    //班干部负责清点人数
    public class StudentLeader {
        public int counts(List<Student> lists){
            return lists.size();
        }
    }

    public class Client{
        public static void main(String[] args){
            System.out.println("周末收假,学校领导命令老师去点名.....");
            Teacher teacher = new Teacher();
            teacher.command();
        }
    }

    正确示范:

    public class LODTeacher {
        //仅仅耦合了LODStudentLeader类
        public void command(LODStudentLeader leader){
            System.out.println("清点人数完毕,总共有:"+leader.counts()+"人");
        }
    }
    
    public class LODStudentLeader {
        //仅仅耦合了student类
        private List<Student> students;
        
        public LODStudentLeader(List<Student> students){
            this.students = students;
        }
        public int counts(){
            return students.size();
        }
    }
    
    public class TaskTest {
        public static void main(String[] args) {
            System.out.println("周末收假,学校领导命令老师去点名.....");
            List<Student> students = new ArrayList<Student>();
            for(int i = 0; i < 20; i++ ){
                  students.add(new Student());
            }
            LODTeacher teacher = new LODTeacher();
            teacher.command(new LODStudentLeader(students));
        }
    }
  • 相关阅读:
    域名和IP地址的关系通俗解释
    简单卷、跨区卷、带区卷、镜像卷和 RAID5的区别
    什么是网络端口
    Windows7 64 bit 下解决:检索 COM 类工厂中 CLSID 为 {0002450000000000C000000000000046} 的组件时失败
    SQL函数,收藏先。
    C#中抽象类和接口的区别(转)
    SQL数据库碎片检查DBCC SHOWCONTIG含义
    SQL锁表语句
    50种方法优化SQL Server
    简单工厂模式(转)
  • 原文地址:https://www.cnblogs.com/o-andy-o/p/10344277.html
Copyright © 2011-2022 走看看