• 设计模式 迪米特法则


    设计模式 迪米特法则

    只和朋友交流

    Only talk to your immediate friends 只与直接的朋友通信。即每个对象都有耦合关系,对象之间有耦合。

    定义老师类

    public class Teacher{
    	// 老师对学生发布命令,清点学生
    	public void commond(GroupLeader groupLeader){
    		List listGirls = new ArrayList();
    		// 初始化学生
    		for(int i = 0; i < 20; i++){
    			listGirls.add(new Girl());
    		}
    		// 然后进行查询任务
    		groupLeader.countGirls(listGirls);
    	}
    }
    

    然后定义体育文员,清查学生

    public class GroupLeader{
    	// 查询数量
    	public void countGirls(List listGirls){
    		
    	}
    }
    

    定义学生类

    public class Girl{
    	
    }
    

    最后定义场景

    public class Client{
    	public static void main(String[] args){
    		Teacher teacher = new Teacher();
    		// 发布命令
    		teacher.commond(new GroupLeader());
    	}
    }
    

    上方代码的问题,Teacher类有一个朋友类,即GroupLeader,并且Girl类出现在commond方法体内,不属于朋友类。

    朋友类:出现在成员变量,方法的输入参数中的类称为成员朋友类,出现在方法内部的类不属于朋友类,

    迪米缇法则 一个类,只和朋友交流。不能和非朋友交流。但是刚刚定义的commond于Girl类有交流,即声明了List数组,即与陌生的Girl类有交流
    修改如下

    修改后的老师类

    public class Teacher{
    	// 老师对学生发布命令
    	public void commond(GroupLeader groupLeader){
    		// 告诉体育委员进行清查任务
    		groupLeader.countGirls();
    	}
    }
    

    体育委员

    public class GroupLeader{
    	private List listGirls;
    	// 将全班学生带入,通过此构造函数Girl产生联系
    	public GroupLeader(List _listGirls){
    		this.listGirls = _listGirls;
    	}
    	// 进行学生数量的清理
    	public void countGirls(){
    		System.out.println(" " + this.listGirls.size());
    	}
    }
    

    定义场景

    public class Client{
    	public static void main(String[] args){
    		List listGirls = new ArrayList();	// 创建一个群体列表
    		// 对学生初始化
    		for(int i = 0; i < 20; i++){
    			listGirls.add(new Girl());
    		}
    		Teacher teacher = new Teacher();
    		// 发布命令
    		teacher.commond(new GroupLeader(listGirls))	
    	}
    }
    

    总结, 类与类之间的关系是建立在类之间,一个方法中不要引入一个类中不存在的对象。

    朋友间有距离

    一个软件安装的过程

    first定义第一步,second定义第二步,third定义第三 步。

    public class Wizard{
    	private Random rand = new Random();
    	// 第一步
    	public int first(){
    	
    	}
    	// 第二步
    	public int third(){
    		
    	}
    	// 第三步
    	public int third(){
    	
    	}
    }
    

    最后定义installSoftware

    public class installSoftware{
    	public void installWizard(Wizard wizard){
    		int first = wizard.first();
    		int second = wizard.second();
    		int third = wizard.third();
    	}
    }
    

    最后定义场景

    public class Client{
    	public static void main(String[] args){
    		installSoftware invoker = new installSoftware();
    		invoker.installWizard(new Wizard());
    	}
    }
    

    根据迪米特法则,两个类之间知道的越少越好,Wizard类的太多方法被installSoftware使用,两者的关系过于亲密,修改后如下

    public class Wizard{
    	private Random rand = new Random();
    	private int first(){
    	}
    	private int second(){
    	}
    	privaet int third(){
    	}
    	// 对外只提供了一个installWizard方法
    	public void installWizard(){
    		int first = this.first();
    		int second = this.second();
    		int third = this.third();	
    	}
    	
    }
    
    public class insatllSoftware{
    	public void installWizard(Wizard wizard){
    		wizard.installWizard();	// 两个类通过此方法连接
    	}
    }
    

    场景类

    public class Client{
    	public static void main(String[] args){
    		installSoftward invoker = new installSoftware();
    		invoker.installWizard(new Wizard());
    	}
    }
    

    是自己的就是自己的

    如果一个方法放在本类中,即不增加类间关系,也不会对本类不产生负面影响,那就放置在本类中。

    在无知的道路上缓步前行
  • 相关阅读:
    bzoj2004(矩阵快速幂,状压DP)
    bzoj1242(弦图判定)
    uva1659(最大费用循环流)
    bzoj1009
    bzoj2893(费用流)
    bzoj4873(最大权闭合子图)
    bzoj2879(动态加边费用流)
    51nod 1239 欧拉筛模板
    poj2774 sa模版
    洛谷3391文艺平衡树
  • 原文地址:https://www.cnblogs.com/melovemingming/p/10014526.html
Copyright © 2020-2023  润新知