外观模式
概述:
为子系统中的一组接口提供一个一致的界面,该模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式的基本组成
- 1)外观角色( facade) : 这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
- 2)子系统角色(sub-system): 实现了子系统的功能。对它而言,facade 角色就和客户角色一样是未知的,它没有任何facade角色的信息和链接。
- 3)客户角色( Customer) : 调用facade角色来完成要得到的功能。
外观模式的结构描述
外观模式的特性
- 将复杂系统的内部子系统与客户程序之间的依赖关系解耦,降低了两者之间的耦合度,增加了整个系统可维护性。
- 为客户程序提供简洁和一致的访问接口,分离和屏蔽客户程序对子系统各对象接口访问。
- 外观模式有助于建立层次化的结构系统,实现对对象之间的依赖关系分层。
应用场景简单示例
场景
相关类图:
代码实现:
子系统:
//存款子系统
class Bank{
//判断是否有足够的存款
public boolean hasSufficientSavings(Client c) {
System.out.println("Check bank for"+c.getName()+".....");
return true;
}
}
//信用子系统
class Credit{
//判断信用是否良好
public boolean hasGoodCredit(Client c) {
System.out.println("Check credit for"+c.getName()+".....");
return true;
}
}
//贷款子系统
class Loan{
//判断有无不良贷款信息
public boolean hasNoBadLoans(Client c) {
System.out.println("Check loans for"+c.getName()+".....");
return true;
}
}
外观类:
//抵押审核人员(外观类)
class Mortgage{
//创建相关对象
private Bank b=new Bank();
private Credit cd=new Credit();
private Loan l=new Loan();
//判断是否满足贷款需求
public boolean isEligible(Client c) {
System.out.println("正在判断"+c.getName()+"是否满足贷款需求....");
boolean eligible=true;
if(!b.hasSufficientSavings(c)) {
eligible=false;
}
if(!cd.hasGoodCredit(c)) {
eligible=false;
}
if(!l.hasNoBadLoans(c)) {
eligible=false;
}
return eligible;
}
}
客户类:
//需要贷款的客户
class Client{
private String name;
public Client(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试类:
/**
* @author Savior.D
*/
public class Demo_FacadePatterns {
public static void main(String[] args) {
//创建客户对象张三
Client c = new Client("张三");
//创建抵押审核人员对象
Mortgage m = new Mortgage();
//抵押审核人员对张三进行各方面审核
boolean eligible=m.isEligible(c);
System.out.println(eligible?"满足要求,可以贷款":"不满足要求,拒绝贷款");
}
}
测试结果:
正在判断张三是否满足贷款需求…
Check bank for张三…
Check credit for张三…
Check loans for张三…
满足要求,可以贷款
希望这篇文章能对你有所帮助,觉得还可以的可以点个赞支持一下~