设计模式之---迪米特法则

核心思想:降低类之间的耦合
来看一个类之间耦合度很高的实例

public class Demeter {
    public static void main(String agrs[]) {
        ScholleManager scholleManager = new ScholleManager();
        CollegeManager CollegeManager = new CollegeManager();
        scholleManager.printAllEmployee(CollegeManager);
    }
}

//学校员工
@Data
class ScholleEmployee {
    private int id;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}

//学校员工
@Data
class CollegeEmployee {
    private int id;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}


//管理学院员工
class CollegeManager {
    //全院所有员工
    List<CollegeEmployee> getCollegeEmployee() {
        List<CollegeEmployee> collegeEmployeeList = new ArrayList<CollegeEmployee>();
        for (int i = 0; i < 10; i++) {
            CollegeEmployee collegeEmployee = new CollegeEmployee();
            collegeEmployee.setId(i);
            collegeEmployeeList.add(collegeEmployee);
        }
        return collegeEmployeeList;
    }



}

//学校员工
class ScholleManager {
    //全校所有员工
    List<ScholleEmployee> getScholleEmployee() {
        List<ScholleEmployee> scholleEmployeeList = new ArrayList<ScholleEmployee>();
        for (int i = 0; i < 10; i++) {
            ScholleEmployee scholleEmployee = new ScholleEmployee();
            scholleEmployee.setId(i);
            scholleEmployeeList.add(scholleEmployee);
        }
        return scholleEmployeeList;
    }

    //输出全部员工

    void printAllEmployee(CollegeManager collegeManager) {
        //将输出学院的方法封装到,CollegeManager中
        List<CollegeEmployee> collegeEmployeeList = collegeManager.getCollegeEmployee();
        System.out.println("--------学院员工-------");
        for (CollegeEmployee collegeEmployee : collegeEmployeeList
        ) {
            System.out.println("学院员工=" + collegeEmployee.getId());
        }
        List<ScholleEmployee> scholleEmployeeList = this.getScholleEmployee();
        System.out.println("--------学校员工-------");
        for (ScholleEmployee scholleEmployee : scholleEmployeeList
        ) {
            System.out.println("学校员工=" + scholleEmployee.getId());
        }
    }
}
运行结果:
--------学院员工-------
学院员工=0
学院员工=1
学院员工=2
学院员工=3
学院员工=4
学院员工=5
学院员工=6
学院员工=7
学院员工=8
学院员工=9
--------学校员工-------
学校员工=0
学校员工=1
学校员工=2
学校员工=3
学校员工=4
学校员工=5
学校员工=6
学校员工=7
学校员工=8
学校员工=9

分析:输出员工时,院管理类的引用作为参数,调用了后去院员工的方法。同时进行了遍历输出。对于学校管理类来说,院管理类就是一个陌生类。他的引用增加了类之间的耦合。
解决思路:院的员工输出方法放在院管理类中。

public class DemeterImp {
    public static void main(String agrs[]) {
        ScholleManager scholleManager = new ScholleManager();
        CollegeManager CollegeManager = new CollegeManager();
        scholleManager.printAllEmployee(CollegeManager);
    }
}

//学校员工
@Data
class ScholleEmployeeImp {
    private int id;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}

//学校员工
@Data
class CollegeEmployeeImp {
    private int id;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }
}


//管理学院员工
class CollegeManagerImp {
    //全院所有员工
    List<CollegeEmployee> getCollegeEmployee() {
        List<CollegeEmployee> collegeEmployeeList = new ArrayList<CollegeEmployee>();
        for (int i = 0; i < 10; i++) {
            CollegeEmployee collegeEmployee = new CollegeEmployee();
            collegeEmployee.setId(i);
            collegeEmployeeList.add(collegeEmployee);
        }
        return collegeEmployeeList;
    }

    void printCollegeManager()

    {
        List<CollegeEmployee> collegeEmployeeList = this.getCollegeEmployee();
        System.out.println("--------学院员工-------");
        for (CollegeEmployee collegeEmployee : collegeEmployeeList
        ) {
            System.out.println("学院员工=" + collegeEmployee.getId());
        }

    }

}

//学校员工
class ScholleManagerImp {
    //全校所有员工
    List<ScholleEmployee> getScholleEmployee() {
        List<ScholleEmployee> scholleEmployeeList = new ArrayList<ScholleEmployee>();
        for (int i = 0; i < 10; i++) {
            ScholleEmployee scholleEmployee = new ScholleEmployee();
            scholleEmployee.setId(i);
            scholleEmployeeList.add(scholleEmployee);
        }
        return scholleEmployeeList;
    }

    //输出全部员工

    void printAllEmployee(CollegeManagerImp collegeManager) {
        //将输出学院的方法封装到,CollegeManager中
        collegeManager.printCollegeManager();
        List<ScholleEmployee> scholleEmployeeList = this.getScholleEmployee();
        System.out.println("--------学校员工-------");
        for (ScholleEmployee scholleEmployee : scholleEmployeeList
        ) {
            System.out.println("学校员工=" + scholleEmployee.getId());
        }
    }
}

总结:一个对象应该对其他对象保持最少的了解。
类与类关系越密切,耦合度越大。
只和直接朋友通信。直接朋友指出现成员变量,方法参数,方法返回值中的类。
出现在局部变量中的类不是直接的朋友。

发布了47 篇原创文章 · 获赞 18 · 访问量 5695

猜你喜欢

转载自blog.csdn.net/yuruizai110/article/details/103396220