• 设计模式_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());
            }
        }
    }
  • 相关阅读:
    『Delphi』字符串操作——返回子串出现的位置
    2007:远见、劲取、专注
    『转载』个人博客吸引风投关注成可盈利业务
    [和管子对话] 1 200745/对面向对象的你言我语
    『Delphi』File not found的解决办法
    Ruby学习1字符串
    聚集表(clustered table)data page中的数据行可以无序
    通过DBCC PAGE查看页信息验证聚集索引和非聚集索引节点信息
    查看SQL Server Resource Database以及修改系统表
    SQL Server的还原(2)——STOPAT
  • 原文地址:https://www.cnblogs.com/zjsy/p/4465698.html
Copyright © 2020-2023  润新知