迪米特法则(最少知识原则):

一个软件实体应当尽可能少的与其他实体发生相互作用。


一、场景

注册公司流程

二、实质

为子系统提供一个统一的入口,封装子系统的复杂性,便于客户端调用。

三、示例


设计模式学习笔记---外观模式Facade pattern(Java版)_Java



package com.lgd.facade;

public interface 工商局 {
	void checkName(); //核名
}

class 海淀区工商局 implements 工商局{

	@Override
	public void checkName() {
		// TODO Auto-generated method stub
		System.out.println("检查名字是否有冲突");
	}
}


package com.lgd.facade;

public interface 税务局 {
	void taxCertificate();//办理税务登记证
}

class 海淀区税务局 implements 税务局{

	@Override
	public void taxCertificate() {
		// TODO Auto-generated method stub
		System.out.println("在海淀区税务局办理登记证");
	}
	
}



package com.lgd.facade;

public interface 质检局 {
	void orgCodeCertificate();//办理组织机构代码证
}

class 海淀区质检局 implements 质检局{

	@Override
	public void orgCodeCertificate() {
		// TODO Auto-generated method stub
		System.out.println("在海淀区质检局办理组织机构代码证");
	}
	
}


package com.lgd.facade;

public interface 银行 {
	void openAccount();//开户
}

class 工商银行 implements 银行{

	@Override
	public void openAccount() {
		// TODO Auto-generated method stub
		System.out.println("在工商银行开户!");
	}
	
}


package com.lgd.facade;

/**
 * 办理注册公司的门面对象
 * @author liguodong
 *
 */

public class Register {
	public void register(){
		工商局 a = new 海淀区工商局();
		a.checkName();
		质检局 b = new 海淀区质检局();
		b.orgCodeCertificate();
		税务局 c = new 海淀区税务局();
		c.taxCertificate();
		银行 d = new 工商银行();
		d.openAccount();		
	}
}


package com.lgd.facade;

public class Client {
	public static void main(String[] args) {
		new Register().register();
	}
}

运行结果:

检查名字是否有冲突
在海淀区质检局办理组织机构代码证
在海淀区税务局办理登记证
在工商银行开户!



四、应用场景

各种技术框架中使用。

如:JDBC封装后的,commons提供的DBUtils类,Hibernate提供的工具类,Spring JDBC工具类等。