外观模式核心
- 为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用
外观模式遵循迪米特法则(最少知识原则):
- 一个软件实体应当尽可能少的与其他实体发生作用关系
外观模式实现
注册公司流程不使用外观模式实现
注册公司流程使用外观模式
代码实现:
工商局:
public interface 工商局 {
void checkName(); //核对名称
}
class 海淀区工商局 implements 工商局 {
@Override
public void checkName() {
System.out.println("检查名字是否有冲突!");
}
}
税务局:
public interface 税务局 {
void taxCertificate(); //办理税务登记证
}
class 海淀税务局 implements 税务局 {
@Override
public void taxCertificate() {
System.out.println("在海淀税务局办理税务登记证!");
}
}
银行:
public interface 银行 {
void openAccount(); //开户
}
class 中国工商银行 implements 银行 {
@Override
public void openAccount() {
System.out.println("在中国工商银行开户!");
}
}
质监局:
public interface 质监局 {
void orgCodeCertificate(); //办理组织机构代码证
}
class 海淀质监局 implements 质监局 {
@Override
public void orgCodeCertificate() {
System.out.println("在海淀区质监局办理组织机构代码证!");
}
}
Facade:
/**
*
* 办理注册公司流程的门面对象
*
* @author ly
*
*/
public class RegisterFacade {
public void register() {
工商局 a = new 海淀区工商局();
a.checkName();
质监局 b = new 海淀质监局();
b.orgCodeCertificate();
税务局 c = new 海淀税务局();
c.taxCertificate();
银行 d = new 中国工商银行();
d.openAccount();
}
}
调用者:
public class Client {
public static void main(String[] args) {
//不使用外观模式
// 工商局 a = new 海淀区工商局();
// a.checkName();
// 质检局 b = new 海淀质检局();
// b.orgCodeCertificate();
// 税务局 c = new 海淀税务局();
// c.taxCertificate();
// 银行 d = new 中国工商银行();
// d.openAccount();
//使用外观模式
new RegisterFacade().register();
}
}