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());
            }
        }
    }
  • 相关阅读:
    如何使用观测者模式实现监控和推送
    oracle在desc表时,name 和type列不能格式化问题(占位过长)
    [置顶] Vim用正则表达式进行批量修改
    Eclipse扩展点
    写给C语言新手的话
    QQ圈子降级为“应用”后应关注其隐私设置
    win8vs2012创建自带sqlServer数据库出错
    JQuery 选择器
    SINGLETON(单例模式)---(孤独的人)
    C++中的常对象和常对象成员
  • 原文地址:https://www.cnblogs.com/zjsy/p/4465698.html
Copyright © 2011-2022 走看看