迪米特法则(最少知识原则):
– 一个软件实体应当尽可能少的与其他实体发生相互作用。
外观模式核心:
– 为子系统提供统一的入口。封装子系统的复杂性,便于客户端调用。
基本案例
– 注册公司流程(不使用外观模式)
package com.bjsxt.facade;
public interface 工商局 {
void checkName();
}
class 海淀区工商局 implements 工商局{
@Override
public void checkName() {
System.out.println("去海淀区工商局检查名字,不能与其他公司名称相似或相同!");
}
}
package com.bjsxt.facade;
public interface 银行 {
void openAccount();
}
class 中国工商银行 implements 银行{
@Override
public void openAccount() {
System.out.println("去中国工商银行给公司开一个账户!");
}
}
package com.bjsxt.facade;
public interface 税务局 {
void taxCertificate();
}
class 海淀区税务局 implements 税务局{
@Override
public void taxCertificate() {
System.out.println("去海淀区税务局税务确认!");
}
}
package com.bjsxt.facade;
public class Client1 {
public static void main(String[] args) {
System.out.println("----自己跑,不用外观模式");
new 海淀区工商局().checkName();
new 中国工商银行().openAccount();
new 海淀区税务局().taxCertificate();
}
}
uml图:
运行结果:
– 注册公司流程(使用外观模式)
package com.bjsxt.facade;
public class Facade {
void register(){
new 海淀区工商局().checkName();
new 中国工商银行().openAccount();
new 海淀区税务局().taxCertificate();
}
}
package com.bjsxt.facade;
public class Client2 {
public static void main(String[] args) {
System.out.println("----用外观模式,掏出一些钱,找代理完成公司注册");
Facade facade = new Facade();
facade.register();
}
}
uml图:
运行结果:
开发中常见的场景
– 频率很高。哪里都会遇到。各种技术和框架中,都 有外观模式的使用。
如:
• JDBC封装后的,commons提供的DBUtils类, Hibernate提供的工具类、Spring JDBC工具类等