迪米特法则(最少知识原则):
一个软件实体应当尽可能少的与其他实体发生相互作用。
一、场景
注册公司流程
二、实质
为子系统提供一个统一的入口,封装子系统的复杂性,便于客户端调用。
三、示例
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工具类等。