迪米特法则

迪米特法则的定义——如果两个类之间不必直接通信,则这两个类不应该发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法,应该通过第三方来转发这个调用。

迪米特法则也称为最少知识原则(talk only to your immediate friends),就是说一个对象应该尽可能少地了解其他对象。从而降低类之间的耦合,这样做的一个可能后果是系统中存在大量的中介类,这在一定程度上会增加系统的复杂性。

迪米特法则强调的前提是在类的结构设计上,每个类都要尽量降低成员的访问权限,类自己包装好自己的private状态,不需要让别的类知道的字段或者行为就不要公开。                                                                                                                                                                                                                                                                                                 举个例子,古代皇帝召见御前侍卫,需要相关职能机构通知传达圣旨给手下,由手下人去通知侍卫,由认识侍卫的人介绍,然后见到侍卫传递圣旨,这里面就有多次第三方传递的过程,也就是迪米特法则的应用。  

/**
  * Author:小青
  * Time:2017-8-27 
  * Function:抽象的陌生人类
  *
  */
public abstract class Stranger{
	public abstract void operation();
}
/**
  * Author:小青
  * Time:2017-8-27 
  * Function:侍卫
  *
  */
public class Shiwei extends Stranger{
	@Override
	public void operation(){
		System.out.println("见过皇上,我是御前侍卫,我能打十个");
	}
}
/**
  * Author:小青
  * Time:2017-8-27 
  * Function:太监
  *
  */
public class Taijian{
	public void operation(){
		System.out.println("other play");	
	}
	public void findStranger(){
		Stranger str = new Shiwei();
		str.operation();
	}
}
/**
  * Author:小青
  * Time:2017-8-27 
  * Function:皇帝
  *
  */
public class Huangdi{
	private Taijian taijian;
	public Taijian getTaijian(){
		return taijian;
	}
	public void setTaijian(Taijian taijian){
		this.taijian = taijian;
	}
	public void operation(){
		System.out.println("someone play");		
	}
}

public class DiMiTeTest{
	public static void main(String[] args){
		//声明并实例化皇帝
		Huangdi kangxi = new Huangdi();
		//设置一个太监的实例化对象,即找到一个转发者帮忙做事
		kangxi.setTaijian(new Taijian());
		//皇帝通过太监传话
		kangxi.getTaijian().findStranger();
	} 
}
迪米特法则的根本思想,是强调类之间需要尽量多的实现松散耦合,类之间耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及,反之会导致很多麻烦。

以上内容,整理自刘径舟,张玉华编著的《设计模式其实很简单》读书笔记,欢迎转载.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值