facade

解决uc浏览器劫持video标签问题 解决uc视频悬浮播放 ,video标签被浏览器劫持 ,vide0适配 阅读详情

java设计模式之外观模式(门面模式)

https://www.cnblogs.com/lthIU/p/5860607.html

  针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。

一、概念介绍

  外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 

二、角色及使用场景

  简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中,设计到3个角色。

  1).门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。

  2).子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。

  3).客户角色:通过调用Facede来完成要实现的功能。

  使用场景:

  1- 为复杂的模块或子系统提供外界访问的模块;

  2- 子系统相互独立;

  3- 在层析结构中,可以使用外观模式定义系统的每一层的入口。

三、实例

  下面,我们就通过一个简单的例子来实现该模式。

  每个Computer都有CPU、Memory、Disk。在Computer开启和关闭的时候,相应的部件也会开启和关闭,所以,使用了该外观模式后,会使用户和部件之间解耦。如:

包体的创建:

代码实现

首先是子系统类:

 【代码清单--1】

复制代码

 1 package com.huawei.facadeDesign.children;
 2 
 3 import org.apache.log4j.Logger;
 4 
 5 /**
 6  * cpu子系统类
 7  * @author Administrator
 8  *
 9  */
10 public class CPU 
11 {
12     public static final Logger LOGGER = Logger.getLogger(CPU.class);
13     public void start()
14     {
15         LOGGER.info("cpu is start...");
16     }
17     
18     public void shutDown()
19     {
20         LOGGER.info("CPU is shutDown...");
21     }
22 }

复制代码

 

 【代码清单--2】

复制代码

 1 package com.huawei.facadeDesign.children;
 2 
 3 import org.apache.log4j.Logger;
 4 
 5 /**
 6  * Disk子系统类
 7  * @author Administrator
 8  *
 9  */
10 public class Disk
11 {
12     public static final Logger LOGGER = Logger.getLogger(Disk.class);
13     public void start()
14     {
15         LOGGER.info("Disk is start...");
16     }
17     
18     public void shutDown()
19     {
20         LOGGER.info("Disk is shutDown...");
21     }
22 }

复制代码

 

【代码清单--3】

复制代码

 1 package com.huawei.facadeDesign.children;
 2 
 3 import org.apache.log4j.Logger;
 4 
 5 /**
 6  * Memory子系统类
 7  * @author Administrator
 8  *
 9  */
10 public class Memory
11 {
12     public static final Logger LOGGER = Logger.getLogger(Memory.class);
13     public void start()
14     {
15         LOGGER.info("Memory is start...");
16     }
17     
18     public void shutDown()
19     {
20         LOGGER.info("Memory is shutDown...");
21     }
22 }

复制代码

 

然后是,门面类Facade

【代码清单--4】

复制代码

 1 package com.huawei.facadeDesign.facade;
 2 
 3 import org.apache.log4j.Logger;
 4 
 5 import com.huawei.facadeDesign.children.CPU;
 6 import com.huawei.facadeDesign.children.Disk;
 7 import com.huawei.facadeDesign.children.Memory;
 8 
 9 
10 /**
11  * 门面类(核心)
12  * @author Administrator
13  *
14  */
15 public class Computer
16 {
17     public static final Logger LOGGER = Logger.getLogger(Computer.class);
18     
19     private CPU cpu;
20     private Memory memory;
21     private Disk disk;
22     public Computer()
23     {
24         cpu = new CPU();
25         memory = new Memory();
26         disk = new Disk();
27     }
28     public void start()
29     {
30         LOGGER.info("Computer start begin");
31         cpu.start();
32         disk.start();
33         memory.start();
34         LOGGER.info("Computer start end");
35     }
36     
37     public void shutDown()
38     {
39         LOGGER.info("Computer shutDown begin");
40         cpu.shutDown();
41         disk.shutDown();
42         memory.shutDown();
43         LOGGER.info("Computer shutDown end...");
44     }
45 }

复制代码

 

最后为,客户角色。

【代码清单--5】

复制代码

 1 package com.huawei.facadeDesign;
 2 
 3 import org.apache.log4j.Logger;
 4 
 5 import com.huawei.facadeDesign.facade.Computer;
 6 
 7 /**
 8  * 客户端类
 9  * @author Administrator
10  *
11  */
12 public class Cilent {
13     public static final Logger LOGGER = Logger.getLogger(Cilent.class);
14     public static void main(String[] args) 
15     {
16         Computer computer = new Computer();
17         computer.start();
18         LOGGER.info("=================");
19         computer.shutDown();
20     }
21 
22 }

复制代码

 

 【代码清单--6】运行结果

  从上面的实例来看,有了这个Facade类,也就是Computer类,用户就不用亲自去调用子系统中的Disk,Memory、CPU类了,不需要知道系统内部的实现细节,甚至都不用知道系统内部的构成。客户端只需要跟Facade交互就可以了。

四、优点

  - 松散耦合

  使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;

  - 简单易用

  客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。

  - 更好的划分访问层次

  有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。

五、延伸及应用(补充)

  ...

 希望对大家的学习有帮助,请多指教。

《QGIS快速入门与应用基础》161:面要素顶点编辑与形状调整 本文系统讲解了QGIS中面要素顶点编辑与形状调整的核心操作。首先明确了顶点编辑的适用场景与核心概念,强调需满足图层类型、编辑模式、要素选择等六大前提。详细介绍了编辑顶点工具(F2键)的激活路径及配套辅助工具,通过耕地地块修正案例,分步骤演示顶点移动、添加(双击/工具栏)、删除(Delete键)三大基础操作。同时提供捕捉工具开启、画布缩放等实用技巧,帮助用户高效完成面要素的精细化调整,解决实际工作中的形状偏差问题。全文图文结合,步骤清晰,适合GIS新手快速掌握面要素编辑的核心技能。 阅读详情

相关推荐

RAGFlow API 实战指南:从数据集管理到智能对话

本文提供了RAGFlow API的实战指南,详细介绍了如何从零开始构建基于检索增强生成(RAG)的智能应用。内容涵盖环境准备、API密钥获取、核心概念理解,以及通过API进行数据集创建与管理、文档上传解析、知识块管理、检索测试,最终创建并配置智能聊天助手,实现基于私有知识库的精准对话。

weixin_29284885的博客 379

Java中外观模式 (Facade Pattern)

Java中外观模式 (Facade Pattern)

sanmansan的博客 718

HBuilderx 坑 之前没问题 改了几行代码 小程序上传报分包大小超过限制

Error: 分包大小超过限制,main package source size 4199KB exceed max limit 2MB [20221213 10:08:06][wx432abdb518bdc1eb]下面的我提示是都没超过2M,却提示我超过限制,代码改了不到20行吧,之前是正常上传的.....,比如这类,要压缩的,前提是没压缩过的,但是我肯定提交的时候是压缩的,没勾选此项的要注意,如果本文解决了你的困扰 来波666不为过吧!

爱就码上行动,奔赴热爱,追光而行。愿你带着从容与热爱,拥抱每一天的惊喜与美好 5220

【设计模式】Java 设计模式之门面模式(Facade)

门面模式作为一种重要的设计模式,在简化复杂系统接口和提高可维护性方面发挥关键作用。它通过提供一个统一的高层接口,使得客户端无需关心底层实现的细节。在实际应用中,门面模式可根据需求进行扩展和变体设计,如分层门面、组合门面等。此外,门面模式常与其他设计模式结合使用,如中介者模式、工厂模式和单例模式,以构建更灵活的系统。未来,随着技术的发展,门面模式将可能面向云原生、结合AI技术,并注重跨平台与跨语言支持,同时加强安全与隐私保护。总之,门面模式将持续发挥重要作用,并在新的领域和场景中展现更多可能性,为构建高效、健

新手村长的专栏 2129

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6011

Java判断地图坐标(经度,纬度)是否在多边形区域或圆形区域内

​欢迎光临我的博客查看最新文章:在地图上,可以使用经纬度确定一个位置,如上海体育场(121.449391,31.188228),如果知道了2个地点的经纬度,我们就能在地图上找到其位置及2点的距离,百度地图或高德地图提供了相应的服务;如果将多个坐标点连成多边形区域,如何判断某个坐标点是否在多边形区域内,如下工具类。

river106的博客 3943

Java设计模式-外观模式(Facade)

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

qq_37400096的博客 2371

保姆级教程:用STM32CubeMX配置GD32的CAN总线(含异常处理)

本文提供了一份详细的STM32CubeMX配置GD32 CAN总线开发指南,涵盖从HAL库移植到异常处理的全过程。重点解析GD32与STM32在CAN总线初始化、报文发送优先级处理等方面的关键差异,并提供优化代码维护与版本控制的实用策略,帮助开发者高效完成项目迁移。

onion的博客 829

设计模式:外观模式

外观模式 概述 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。 定义: ​ 又名门面模式,是...

qq_29860591的博客 589

Mac电脑安装burp suite2024版本记录

下载最新版本burpsuitloader-XXX-all.jar,改名为burpsuitloader.jar。目录下,修改vmoptions.txt文件,新增以下内容,如果keygen不是这个名称的话,需要修改。,点击license左侧的copy复制它,然后手动从启动台启动burpsuite。,复制如下命令到终端即可(要加双引号,不然目录中空格会导致命令截断)再复制激活响应信息到burpsuite中即可激活。后续运行burp直接从启动台运行即可。将如下框的信息复制到激活器中。输入后下一步,点击手动激活。

墨痕诉清风的博客 902

摆脱英文束缚!群晖Transmission4.0.4全新中文界面攻略

在群晖安装完官方Transmission4.0.4套件后,界面是英文状态的,不太好用。但是按照网上分享的原来4.0以前版本的方法更新UI又失败,所以自己搞了下成功了,分享给需要的朋友。

XiaoqiangClub的博客 5214

【设计模式——学习笔记】23种设计模式——外观模式Facade(原理讲解+应用场景介绍+案例介绍+Java代码实现)

讲解外观模式的思想,介绍其常见的应用场景,举例说明其实现方式

我只管埋头前行,剩下的交给时间。 2036

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1112

Facade模式的介绍

 Facade模式http://www.diybl.com/ 2007-12-22  网络 点击:157  [ 评论 ]--文章搜索:     【点击打包该文章】  【本站开通在线QQ讨论群】 第一次看设计模式,挺有意思参考两本书,设计模式精解和设计模式精解-GoF 23 种设计模式解析附 C++实现源码FACADE 模式,正面模式?他之所以这么命名,是因为他在原系统之前放了一个新

985

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Facade原理

Facade 是一个可以从容器访问对象的类。你可以为任何的非静态类库定义一个facade类,并静态访问其方法。 参考文档: thinkPHP5文档 1.定义一个普通类 <?php namespace app\comm; class FacadeTest { protected $str = 'hello'; public function index()...

u012467744的博客 1250

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Facade模式

Facade模式   Facade模式要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。 就如同医院的接待员一样,Facade模式的Facade类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与Facade对象打交道,而不需要与子系统内部的很多对象打交道。 观察者模式的结构 Facade的几个要点 从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达

liaowenxiong的博客 1666

Laravel 创建自己的 Facade

博客原文:Laravel 创建自己的 Facade 前言 laravel 提供了一个灵活的模式,那就是 facade 。框架内部的 DB、Auth、File 等功能也有相关的 facade 实现。那么,该如何写自己的 facade 呢? Facade 是什么? 首先,facade 并不是 laravel 独有的东西,它就是设计模式中的外观模式(Facade)。 当然,这里就不长篇大论去讨论外观...

cqims21的专栏 799

深入理解 Laravel 之 Facade

阅读建议 在阅读这篇文章之前,我希望您对 Laravel 的容器具有一定的使用和了解,如果不熟悉的话,请阅读 Laravel 容器,这方面的知识对于理解我今天要讲的东西非常有必要,再次提醒一下各位,这篇博文容量很大,仔细体会消化,希望能有所收获。 注册 Facade 如果你使用过第三方的 composer 包,它会提醒你,把它的 ServiceProvider 和 Facade 写入到 config/app.php 文件中,如下: 当然了,注册 Facade 和 ServiceProvider 不止这么一

weixin_49163826的博客 1756

外观(Facade)模式

外观模式 为子系统提供一个一致的接口,此模式定义了一个高层接口,使得子系统更加容易使用。 子系统将多个接口进行综合管理。 举个栗子: 假设我们要做股票,我们就需要去学股票的知识,我们可以找基金,让其帮我们做投资。而基金就懂得各种理财知识。 此时基金对我们用户就是Facade,做股票,做期货,做货币这些子系统,Facade是对这些子系统的接口的集合。 Facade 中拥有所有子系统的对象。facad...

不吐泡泡的咸鱼 280

Facade 模式

Facade 模式 使用Facade模式可以为互相关联在一起的错综复杂的类整理出高层接口(API)。其中的Facade角色可以让系统对外只有一个简单的接口(API)。而且,Facade角色还会考虑系统内部各个类之间的责任关系和依赖关系,按照正确的顺序调用各个类。 示例程序 示例程序类图 Database mport java.io.FileInputStream; import java.io....

stepMore的博客 581

Laravel facade

Laravel facade概述框架中的例子定义自己的facade参考链接 概述 在laravel中,facade作为容器中类的静态代理,它可以让你以静态的方式调用容器中的任何对象的任何方法。 实现了对类的快捷访问的一种方式。 框架中的例子 比如最常用的写log,facade用法 \Log::info('xxx'); 从容器中取出使用的用法: app('log')->info('xxx');...

March 764

Facade (外观)模式

15.1 Facade 模式   程序总是会变得越来越大。随着时间的推移,程序中的类会越来越多,而且它们之间相互关联,这会导致程序结构也会变得越来越复杂。我们在使用这些类之前,必须先弄清楚它们之间的关系,注意正确的调用顺序。   不过与其这么做,不如为这个大型程序准备一个“窗口”。这样,我们就不必单独地关注每个类了,只需简单地对 “窗口” 提出请求即可。   使用 Facade 模式可以为互相关联...

矢落叶の博客 707

java设计模式之Facade模式

介绍外观模式之前,首先让我们来看下面的例子:假设我们现有一个对外接口FacadeService,里面有一个对外的方法a();public interface FacadeService { public void a();//这个方法是给外部调用的 }他有一个实现类FacadeServiceImpl,他实现了FacadeService接口的a方法,同时又新增了一个自己的供内部调用的方法b...

一只小菜鸡 5232

facade java_Java中的Facade模式

什么是Facade模式随着系统越来越复杂,我们需要把细节隐藏起来,给客户端提供一个统一的接口。在这种需求下facade模式诞生了。该模式比较简单,我们只需要在系统变得复杂把它运用上来,这样底层跟客户端就能够很大程度上解耦。比如你基于平台做业务开发,那么一种很多的方式是,平台把所有底层逻辑封装进facade 模式。开发着只需要通过facade 就可以知道平台大部分功能。它相当于开发者与平台之间的一种...

weixin_39707478的博客 882

facade php,如何在 Laravel 项目中创建自己的 Facade

通过这篇文章,我们可以学会如何定义自己的facade类,并且在我们的项目中使用它。这里我想创建一个名称为SmartLogger的类,同时尝试使用它,下面让我们开始吧:首先创建一个以SmartLogger命名的目录,并且在目录中创建如下php文件:.├── SmartLoggerFacade.php└── SmartLogger.php0 directories, 2 filesSmartLogge...

weixin_39732249的博客 209
上一篇: main
下一篇: UTXO详解
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值