java 门面模式_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、更好的划分系统接口:对内和对外的接口,可以做很好的区别划分
java 门面模式_Java门面模式相关推荐
- java mvc模式_Java MVC模式
MVC模式表示:模型 -视图 - 控制器模式.此模式用于分离应用程序的问题. 模型(Model) - 模型表示携带数据的对象或JAVA POJO.如果其数据改变它也可以具有逻辑来更新控制器. 视图(V ...
- 状态模式java 在线投票_Java 状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模 ...
- java dao模式_Java DAO 模式
DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问.通俗来讲,就是将数据库操作都封装起来. 对外提供相应的接口 在面向对象 ...
- java动态代理_Java代理模式及动态代理详解
Java的动态代理在实践中有着广泛的使用场景,比如最场景的Spring AOP.Java注解的获取.日志.用户鉴权等.本篇文章带大家了解一下代理模式.静态代理以及基于JDK原生动态代理. 代理模式 无 ...
- java 值对象_java 中设计模式(值对象)的实例详解
java 中设计模式(值对象)的实例详解 应用场景:在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互?这个时候就需要用到我们的值对象设 ...
- java单态模式_Java单态模式
Java的单态模式 Singletom 作用:保证在Java应用程序中,一个Java类只有一个实例存在:所以一般单态类会提供一个返回该类实例的方法.提供一个对对象的全局访问指针. 优点:节省内存,限制 ...
- 策略模式java 用例_java策略模式简单用例
运用java策略模式一个小程序 /** * */ package Strategy; import java.util.Arrays; /** * @author HuangRong * @Funti ...
- java 模板模式_Java模板模式(Template模式)
Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...
- java state用法_Java状态模式(State模式)
State的定义:不同的状态,不同的行为:或者说,每个状态有着相应的行为. 何时使用状态模式State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elsei ...
最新文章
- CoreCLR系列随笔 之ClrJit项目之alloc.cpp文件分析(1)
- 陈松松:刚入门的视频营销新人,需要做哪些准备?
- java arraylist comparable_Java 两种ArrayList集合自定义对象属性排序,Comparator接口 或 Comparable接口...
- Oracle For Linux安装脚本
- 嵌入式web服务器预研报告(转)
- 零基础转行Linux云计算运维工程师获得20万年薪的超级学习技巧
- 模板多个列表级联_Excel办公技巧:使用power query快速合并同一工作簿的多个工作表...
- python是什么专业学的-Python开发专业学校排名是什么样的
- 用自己的数据集训练Mask-RCNN实现过程中的坑
- 亚马逊表示并未放弃WP平台:正在打造新应用
- 一篇关于蓝牙SDP和L2CAP协议的文章
- 【原】 OPenCV学习笔记1:imread()
- HTML设置网页小图标
- python项目源码和注解_python源代码和注释 - 随笔分类 - 秦朗的天空 - 博客园
- 用Python计算利率,告诉你亏了多少!
- 二维码制作软件----如何让二维码内容换行显示
- APP性能测试——启动耗时测试
- android 用 versionName 进行比对做版本更新 - kt
- 【R语言】文件及路劲操作
- PLC远程监控有什么方式?如何进行远程上下载?
热门文章
- 在mysql中删除表中字段_MySQL中的表中增加删除字段
- dense rank改为mysql_mysql上排名sql的写法,类似oracle的rank和dense
- centos安装盘ntfs_在CentOS下挂载NTFS格式U盘的方法
- 你活在一个计算机模拟中吗,一麻省理工教授认为,我们更有可能生活在计算机模拟宇宙中...
- 内存属于linux文件吗,linux下的/dev/shm是什么? 内存 文件系统
- win8配置_《FIFA 20》PC配置公布 最低仅需i3+GTX660
- 顺序表输入栈元素c语言,C语言数据结构之栈简单操作
- [Linux]Linux下经常会用到的简单实例(持续更新)
- Struts2中通过Ajax传递json数据
- in-place数据交换