高端定制网站开发建站教程详解,石家庄网站运营,网站开发中 视频播放卡,c2c的含义分别是什么简介
门面模式#xff08;Facade Pattern#xff09;又叫作外观模式#xff0c;提供了一个统一的接口#xff0c;用来访问子系统中的一群接口。其主要特征是定义了一个高层接口#xff0c;让子系统更容易使用#xff0c;属于结构型设计模式。
通用模板 创建子系统角色类…简介
门面模式Facade Pattern又叫作外观模式提供了一个统一的接口用来访问子系统中的一群接口。其主要特征是定义了一个高层接口让子系统更容易使用属于结构型设计模式。
通用模板 创建子系统角色类可以同时有一个或多个SubSystem。每个SubSytem都不是一个单独的类而是一个类的集合。SubSystem并不知道Facade的存在对于SubSystem而言Facade 只是另一个客户端而已即Facade对SubSystem透明。
// 子系统A
public class SubSystemA {public void doA(){System.out.println(子系统A处理一些事情...);}
}// 子系统B
public class SubSystemB {public void doB(){System.out.println(子系统B处理一些事情...);}
}创建门面角色类是系统对外的统一接口。
// 门面类
public class Facade {private SubSystemA a new SubSystemA();private SubSystemB b new SubSystemB();// 对外接口public void doA(){a.doA();}// 对外接口public void doB(){b.doB();}
}
模板测试 代码
public class Client {public static void main(String[] args) {Facade facade new Facade();facade.doA();facade.doB();}
}结果 子系统A处理一些事情...
子系统B处理一些事情...应用场景
在日常生活中门面模式也是很常见的。比如我们去医院就诊很多医院都设置了导诊台这个导诊台就好比一个门面。有了这个导诊台我们全程就诊都不需要到处乱转就诊路线变得非常清楚。再比如现在中国就要全面进入小康社会很多农村家家户户都建起了小别墅。那么建别墅也是一项很复杂的工程。在以前都是相互帮忙把房子建起来但是建别墅一般要找一个承建方负责设计、施工等。我们通常说的包工头其实就是一个门面在施工过程中有任何需要协调对接的找包工头就可以了。 在软件系统中门面模式适用于以下应用场景。 1为一个复杂的模块或子系统提供一个简洁的供外界访问的接口。 2希望提高子系统的独立性时。 3当子系统由于不可避免的暂时原因导致可能存在Bug或性能相关问题时可以通过门面模式提供一个高层接口隔离客户端与子系统的直接交互预防代码污染。
优点
1简化了调用过程不用深入了解子系统以防给子系统带来风险。 2减少系统依赖松散耦合。 3更好地划分访问层次提高了安全性。 4遵循迪米特法则。
缺点
1当增加子系统和扩展子系统行为时可能容易带来未知风险。 2不符合开闭原则。 3某些情况下可能违背单一职责原则。
“生搬硬套”实战
场景描述
我们以注册公司为例假设注册公司需要三步
向工商局申请公司营业执照在银行开设账户在税务局开设纳税号。
现在各地政府都有政务大厅再也不用去各个地方跑去问怎么处理直接通过政务大厅就一次性办理了。
代码开发 创建子系统角色这里指的是工商注册、银行开户、纳税登记类 // 工商注册
public class AdminOfIndustry {public void register() {System.out.println(工商注册);}
}// 银行开户
public class Bank {public void openAccount() {System.out.println(银行开账户);}
}// 纳税登记
public class Taxation {public void applyTaxCode() {System.out.println(纳税登记);}
}创建门面角色这里指的是政务大厅类
public class Facade {private AdminOfIndustry adminOfIndustry new AdminOfIndustry();private Bank bank new Bank();private Taxation taxation new Taxation();public void register(){adminOfIndustry.register();}public void openAccount(){bank.openAccount();}public void applyTaxCode(){taxation.applyTaxCode();}
}至此我们就通过“生搬硬套”门面模式的模板设计出一套通过门面就可以处理所有子系统的业务了接下来我们进行测试 测试代码
public class Client {public static void main(String[] args) {Facade facade new Facade();facade.register();facade.openAccount();facade.applyTaxCode();}
}结果 工商注册
银行开账户
纳税登记总结
在日常编码工作中我们都在有意无意地大量使用门面模式。但凡只要高层模块需要调度多个子系统2个以上类对象我们都会自觉地创建一个新类封装这些子系统提供精简的接口让高层模块可以更加容易地间接调用这些子系统的功能。尤其是现阶段各种第三方SDK、开源类库很大概率都会使用门面模式。大家觉得调用方便的一般门面模式使用得更多。