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

    设计模式_05_迪米特法则

    例:总公司打印员工信息

    package designPatternOf_05;
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 迪米特法则:一个对象,应该对其他对象保持最少了解
     *         即:只与直接朋友发生通信
     * 例子:一个集团,下属单位有分公司,和直属部门,现在要求打印所有下属单位的员工ID。 
     * 问题:公司与分公司耦合,与分公司员工没有直接关系,不因有耦合
     */
    public class LawOfDemeter_01 {
        public static void main(String[] args) {
            CompanyManager cm=new CompanyManager();
            SubCompanyManager scm=new SubCompanyManager();
            cm.printAllEmployee(scm);
        }
    }
    
    //公司员工
    class Employee{
        private String id;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    }
    
    //分公司员工
    class SubEmployee{
        private String id;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    }
    
    class SubCompanyManager{
        public List getAllEmployee(){
            List list=new ArrayList();
            for(int i=0;i<100;i++){
                SubEmployee semp=new SubEmployee();
                //为分公司人员分配id
                semp.setId("分公司:"+i);
                list.add(semp);
            }
            return list;
        }
    }
    
    class CompanyManager{
        public List getAllEmployee(){
            List list=new ArrayList();
            for(int i=0;i<100;i++){
                Employee emp=new Employee();
                //为分公司人员分配id
                emp.setId("公司:"+i);
                list.add(emp);
            }
            return list;
        }
        
        public void printAllEmployee(SubCompanyManager scm){
            List<SubEmployee> list1=scm.getAllEmployee();
            for (SubEmployee se : list1) {
                System.out.println(se.getId());
            }
            
            List<Employee> list2=this.getAllEmployee();
            for (Employee employee : list2) {
                System.out.println(employee.getId());
            }
        }
    }

    解决:

    package designPatternOf_05;
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 迪米特法则:一个对象,应该对其他对象保持最少了解
     *         即:只与直接朋友发生通信
     * 例子:一个集团,下属单位有分公司,和直属部门,现在要求打印所有下属单位的员工ID。 
     * 问题:公司与分公司耦合,与分公司员工没有直接关系,不因有耦合
     * 修改:给分公司添加打印方法,这样总公司直接调用就行了
     */
    public class LawOfDemeter_02 {
        public static void main(String[] args) {
            CompanyManager02 cm=new CompanyManager02();
            SubCompanyManager02 scm=new SubCompanyManager02();
            
        }
    }
    
    //公司员工
    class Employee02{
        private String id;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    }
    
    //分公司员工
    class SubEmployee02{
        private String id;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    }
    
    //分公司
    class SubCompanyManager02{
        public List getAllEmployee(){
            List list=new ArrayList();
            for(int i=0;i<100;i++){
                SubEmployee semp=new SubEmployee();
                //为分公司人员分配id
                semp.setId("分公司:"+i);
                list.add(semp);
            }
            return list;
        }
        //添加print方法
        public void printEmployee(){
            List<SubEmployee> se=this.getAllEmployee();
            for (SubEmployee subEmployee : se) {
                System.out.println(subEmployee.getId());
            }
        }
    }
    
    //总公司    开闭原则
    class CompanyManager02{
        public List getAllEmployee(){
            List list=new ArrayList();
            for(int i=0;i<100;i++){
                Employee02 emp=new Employee02();
                //为分公司人员分配id
                emp.setId("公司:"+i);
                list.add(emp);
            }
            return list;
        }
        
        public void printAllEmployee(SubCompanyManager02 scm){
            scm.printEmployee();
            
            List<Employee02> list2=this.getAllEmployee();
            for (Employee02 employee : list2) {
                System.out.println(employee.getId());
            }
        }
    }
  • 相关阅读:
    git push要输入密码问题
    excel换行
    React的diff算法
    https的通信过程
    一道面试题的分析
    Mac将应用拖入Finder工具栏
    React获取组件实例
    Warning: Received `false` for a non-boolean attribute `xxx`.
    warning: React does not recognize the xxx prop on a DOM element
    webpack开发模式和生产模式设置及不同环境脚本执行
  • 原文地址:https://www.cnblogs.com/zjsy/p/4465698.html
Copyright © 2011-2022 走看看