一、简介

隐藏系统的复杂性,对外提供统一的访问入口,外部系统访问只通过此暴露出的统一接口访问。是一种结构型模式。封装子系统接口的复杂性,提供统一的对外接口,能够使子系统更加简单的被使用。

二、结构及使用场景

如上所示,可以很简单明了的看出,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、更好的划分系统接口:对内和对外的接口,可以做很好的区别划分

java 门面模式_Java门面模式相关推荐

  1. java mvc模式_Java MVC模式

    MVC模式表示:模型 -视图 - 控制器模式.此模式用于分离应用程序的问题. 模型(Model) - 模型表示携带数据的对象或JAVA POJO.如果其数据改变它也可以具有逻辑来更新控制器. 视图(V ...

  2. 状态模式java 在线投票_Java 状态模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模 ...

  3. java dao模式_Java DAO 模式

    DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问.通俗来讲,就是将数据库操作都封装起来. 对外提供相应的接口 在面向对象 ...

  4. java动态代理_Java代理模式及动态代理详解

    Java的动态代理在实践中有着广泛的使用场景,比如最场景的Spring AOP.Java注解的获取.日志.用户鉴权等.本篇文章带大家了解一下代理模式.静态代理以及基于JDK原生动态代理. 代理模式 无 ...

  5. java 值对象_java 中设计模式(值对象)的实例详解

    java 中设计模式(值对象)的实例详解 应用场景:在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?这个时候就需要用到我们的值对象设 ...

  6. java单态模式_Java单态模式

    Java的单态模式 Singletom 作用:保证在Java应用程序中,一个Java类只有一个实例存在:所以一般单态类会提供一个返回该类实例的方法.提供一个对对象的全局访问指针. 优点:节省内存,限制 ...

  7. 策略模式java 用例_java策略模式简单用例

    运用java策略模式一个小程序 /** * */ package Strategy; import java.util.Arrays; /** * @author HuangRong * @Funti ...

  8. java 模板模式_Java模板模式(Template模式)

    Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...

  9. java state用法_Java状态模式(State模式)

    State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elsei ...

最新文章

  1. CoreCLR系列随笔 之ClrJit项目之alloc.cpp文件分析(1)
  2. 陈松松:刚入门的视频营销新人,需要做哪些准备?
  3. java arraylist comparable_Java 两种ArrayList集合自定义对象属性排序,Comparator接口 或 Comparable接口...
  4. Oracle For Linux安装脚本
  5. 嵌入式web服务器预研报告(转)
  6. 零基础转行Linux云计算运维工程师获得20万年薪的超级学习技巧
  7. 模板多个列表级联_Excel办公技巧:使用power query快速合并同一工作簿的多个工作表...
  8. python是什么专业学的-Python开发专业学校排名是什么样的
  9. 用自己的数据集训练Mask-RCNN实现过程中的坑
  10. 亚马逊表示并未放弃WP平台:正在打造新应用
  11. 一篇关于蓝牙SDP和L2CAP协议的文章
  12. 【原】 OPenCV学习笔记1:imread()
  13. HTML设置网页小图标
  14. python项目源码和注解_python源代码和注释 - 随笔分类 - 秦朗的天空 - 博客园
  15. 用Python计算利率,告诉你亏了多少!
  16. 二维码制作软件----如何让二维码内容换行显示
  17. APP性能测试——启动耗时测试
  18. android 用 versionName 进行比对做版本更新 - kt
  19. 【R语言】文件及路劲操作
  20. PLC远程监控有什么方式?如何进行远程上下载?

热门文章

  1. 在mysql中删除表中字段_MySQL中的表中增加删除字段
  2. dense rank改为mysql_mysql上排名sql的写法,类似oracle的rank和dense
  3. centos安装盘ntfs_在CentOS下挂载NTFS格式U盘的方法
  4. 你活在一个计算机模拟中吗,一麻省理工教授认为,我们更有可能生活在计算机模拟宇宙中...
  5. 内存属于linux文件吗,linux下的/dev/shm是什么? 内存 文件系统
  6. win8配置_《FIFA 20》PC配置公布 最低仅需i3+GTX660
  7. 顺序表输入栈元素c语言,C语言数据结构之栈简单操作
  8. [Linux]Linux下经常会用到的简单实例(持续更新)
  9. Struts2中通过Ajax传递json数据
  10. in-place数据交换