设计模式_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());
        }
    }
}

 

转载于:https://www.cnblogs.com/zjsy/p/4465698.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值