Java门面模式
一、简介
隐藏系统的复杂性,对外提供统一的访问入口,外部系统访问只通过此暴露出的统一接口访问。是一种结构型模式。封装子系统接口的复杂性,提供统一的对外接口,能够使子系统更加简单的被使用。
二、结构及使用场景
如上所示,可以很简单明了的看出,Facede就是将复杂的底层系统,封装到一个统一的接口,更简单的提供给外部客户端使用。其中,涉及角色:
1、客户端client角色:通过调用facede门面,来调用服务,完成功能
2、门面facede角色:子系统服务和客户端的纽带。通过特定的需求,可以封装子系统接口,提供统一接口供客户端使用
3、子系统角色:真正处理任务的地方。
使用场景:封装复杂的子系统,提供统一简单的对外服务接口
三、代码简例
package com.cfang.oTest; import lombok.extern.slf4j.Slf4j; @Slf4j public class TestFacede { /* * client调用 */ public static void main(String[] args) { Facede facede = new Facede(); facede.open(); log.info("========"); facede.close(); } /* * Facede */ static class Facede{ private SystemA systemA; private SystemB systemB; public Facede(){ systemA = new SystemA(); systemB = new SystemB(); } public void open() { systemA.openA(); systemB.openB(); } public void close() { systemA.closeA(); systemB.closeB(); } } /* * 子系统A */ static class SystemA{ public void openA(){ log.info("open a..."); } public void closeA(){ log.info("close a..."); } } /* * 子系统B */ static class SystemB{ public void openB(){ log.info("open b..."); } public void closeB(){ log.info("close b..."); } } }
运行结果:
以上可以看出,有了facede,客户端如果想做开启子系统的时候,不需要知道具体的open细节,如何open,直接通过facede中提供的统一open即可完成。
三、优缺点
优点:1、解耦 - 客户端与子系统解耦,不需要关注子系统如何实践,只需要跟facede交互即可
2、更好的划分系统接口:对内和对外的接口,可以做很好的区别划分