博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式_05_迪米特法则
阅读量:4589 次
发布时间:2019-06-09

本文共 3576 字,大约阅读时间需要 11 分钟。

设计模式_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
list1=scm.getAllEmployee(); for (SubEmployee se : list1) { System.out.println(se.getId()); } List
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
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
list2=this.getAllEmployee(); for (Employee02 employee : list2) { System.out.println(employee.getId()); } }}

 

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

你可能感兴趣的文章
高效算法的常用技术(算法导论)
查看>>
TCP、UDP套接字网络协议
查看>>
STDIN_FILENO与stdin区别(转)
查看>>
页面操作postback后保持滚动条位置
查看>>
nginx动静分离小示例
查看>>
nginx socket转发设置
查看>>
centos samba搭建
查看>>
Android Studio 错误: 非法字符: '\ufeff'
查看>>
并发编程--一堆锁,GIL,同步异步,Event事件
查看>>
svn配置
查看>>
解决SQLite database is locked
查看>>
Javascript中this关键字
查看>>
微信静默授权
查看>>
Spring MVC框架初步讲解
查看>>
关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结
查看>>
C#线程安全打开/保存文件对话框
查看>>
201555334 实验一:Java开发环境的熟悉 总结
查看>>
docker系列 --- 命令详解
查看>>
观察者模式 -- 设计模式系列文章(二)
查看>>
MySql学习14-----数据备份和恢复
查看>>