Facade(外观)--对象结构型模式

Facade(外观)–对象结构型模式

一、意图
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

二、动机
在这里插入图片描述

1.上述左边方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。
2,如何简化外部客户程序和系统间的接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?

三、适用性
1.当你要为一个复杂子系统提供一个简单的接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具有可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来了一些使用上的困难。Facade可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过Facade层。
2.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。
3.当你需要构建一个层次结构的子系统时,使用facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们之间的依赖关系。

四、结构
在这里插入图片描述

五、效果
1.它对客户屏蔽子系统组件,因为减少了客户处理的对象的数目并使得子系统使用起来更加方便。
2.它实现了子系统与客户之间的耦合关系,而子系统内部的功能组件往往是紧耦合的。松耦合的关系是的子系统的组件变化不会影响到它的客户。Facade模式有助于建立层次结构系统,也有助于对对象之间的依赖关系分层。Facade模式可以消除复杂的循环依赖关系。这一点在客户程序与子系统时分别实现的时候尤为重要。
3.如果应用需要,它并不限制它们使用子类系统。因此你可以在系统易用性和通用型之间加以选择。

六、实现
1.降低客户-子系统之间的耦合度。
2.公共子系统与私有子系统类。

七、要点总结
1.从客户程序的角度来看,Facade模式简化了整个组件系统的接口,对于组件内部与外部客户程序来说,达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Facade接口的变化。
2.Facade设计模式更注重从架构的层次看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式。
3.Facade设计模式并非一个集装箱,可以任意地放进任何多个对象。Facade模式中组件内部应该是“相互耦合关系比较大的一系统组件”,而不是一个简单的功能集合。

八、相关模式
Abstract Factory模式可以与Facade模式一起使用以提供一个接口,这一接口可用来以一种子系统独立的方式创建的子对象。Abstract Factroy也可以代替Facade模式隐藏那些与平台相关的类。
Mediator模式与Facade模式的相似之处是,它抽象了一些已有的类的功能。然而,Mediator的目的是对同事之间的任意通讯进行抽象,通常集中不属于任何单个对象的功能。Mediator的同事对象知道中介者并与它通信,而不是直接与其他对象通信。相对而言,Facade模式仅对于子系统对象的接口进行抽象,从而使它们更容易使用;它并不定义新功能。子系统也不知道facade的存在。
通常来讲,仅需要一个Facade对象,因此Facade对象通常属于Singleton模式。

九、举例说明
想了解一个村,简单的方式先问村长。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core微服务开发网篇-ocelot

通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关。环境要求:vs2019.NetCore3.1Ocelot16.0.1创建一个产品服务Api站点(AAStore.ProductCatalog.Api)添加一个ProductController[Route("api/[…

Flyweight(享元)--对象结构型模式

Flyweight(享元)–对象结构型模式 一、意图 运行共享技术有效地支持大量细粒度的对象。 二、动机 1.在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。 2.…

IBM 声明对 Google 违背承诺未将 Istio 贡献给 CNCF 表示失望

Jason R McGee,IBM 院士,IBM 云平台副总裁兼 CTO。昨天晚上Google 宣布将 Istio 商标转让给 Open Usage Commons 组织,IBM 当即在 IBM Developer 网站上发表声明对 Google 的做法表示失望。以下为 IBM 云平台副总裁兼 CTO Jason R McGee 的声…

[mybatis]Configuration XML_properties

properties mybatis可以使用properties来引入外部properties配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源 process 项目结构: mybatis-config.xml: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTY…

Proxy(代理)--对象结构型模式

Proxy&#xff08;代理&#xff09;–对象结构型模式 一、意图 为其他对象提供一种代理以控制对这个对象的访问。 二、动机 1.在面向对象系统中&#xff0c;有些对象由于某种原因&#xff08;比如对象创建的开销很大&#xff0c;或者某些操作需要安全控制&#xff0c;或者需要…

浅谈.Net Core DependencyInjection源码探究

前言对于IOC和DI&#xff0c;可能每个人都能说出自己的理解。IOC全称是Inversion of Control翻译成中文叫控制反转&#xff0c;简单的说就是把对象的控制权反转到IOC容器中&#xff0c;由IOC管理其生命周期。DI全称是DependencyInjection翻译成中文叫依赖注入&#xff0c;就是I…

[mybatis]Configuration XML_settings

settings settings包含很多重要的设置项 setting:用来设置每一个设置项name:设置项名value:设置项取值 mapUnderscoreToCamelCase 开启驼峰命名法 <settings><setting name"mapUnderscoreToCamelCase" value"true"/></settings>Emplo…

Chain of responsibility(职责链)--对象行为型模式

Chain of responsibility&#xff08;职责链&#xff09;–对象行为型模式 一、意图 使多个对象有机会处理请求&#xff0c;从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 二…

[mybatis]Configuration XML_typeAliases and Alias

There are many built-in type aliases for common Java types. They are all case insensitive, note the special handling of primitives due to the overloaded names. typeAliases typeAlias:为某个java类型起别名 type:指定要起别名的类型全类名;默认别名就是类名小写;em…

Command(命令)--对象行为型模式

Command&#xff08;命令&#xff09;–对象行为型模式 一、意图 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 二、动机 1.在软件构建过程中&#xff0c;“行为请求…

实现业务数据的同步迁移 · 思路一

&#xff08;好雨知时节&#xff0c;大雨 _ _ _&#xff09;时不时的呢&#xff0c;会有小伙伴问我这样的问题&#xff1a;1、群主&#xff0c;你的.tsv文件是如何生成的&#xff1f;2、在线项目数据和种子数据的不一样&#xff0c;可以下么&#xff1f;3、如果我本地的数据开发…

Interpreter(解释器)--类行为型模式

Interpreter&#xff08;解释器&#xff09;–类行为型模式 一、意图 给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。 二、动机 1.在软件构建过程中&#xff0c;如果某一特定领域的问题比…

基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (下篇)

一、前言回顾&#xff1a;基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (上篇)在上一篇中&#xff0c;主要讲解了授权在配置方面的源码&#xff0c;从添加授权配置开始&#xff0c;我们引入了需要的授权配置选项&#xff0c;而不同的授权要求构建不同的策略方式&#xff0…

Iterator(迭代器)--对象行为模式

Iterator&#xff08;迭代器&#xff09;–对象行为模式 一、意图 提供一种方法顺序访问一个聚合对象的各个元素&#xff0c;而又不需暴露该对象的内部结构。 二、动机 1.在软件构建过程中&#xff0c;集合对象内部结构常常变化各异。但对于这些集合对象&#xff0c;我们希望…

Blazor带我重玩前端(三)

VS自带的Blazor模板介绍需要升级VS2019以及.NET Core到最新版&#xff08;具体的最低支持&#xff0c;我已经忘了&#xff0c;总是越新支持的就越好&#xff09;&#xff0c;以更好的支持自己开发Blazor项目。使用VS创建Blazor WebAssembly项目搜索Blazor模板选择Blazor WebAss…

[mybatis]Configuration XML_environments

enviroments transactionManager There are two TransactionManager types (i.e. type"[JDBC|MANAGED]") that are included with MyBatis: • JDBC – This configuration simply makes use of the JDBC commit and rollback facilities directly. It relies on the…

Mediator(中介者)--对象行为型模式

Mediator&#xff08;中介者&#xff09;–对象行为型模式 一、意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 二、动机 1.在软件构建过程中&#xff0c;经常…

[mybatis]Configuration XML_mappers

mappers 将sql映射注册到全局配置中 mapper 注册一个sql映射 resource:引用类路径下的sql映射文件url:引用网络路径或者磁盘路径下的sql映射文件class:引用(注册)接口 1.有sql映射文件&#xff0c;映射文件名必须和接口同名&#xff0c;并且放在与接口同一目录下&#xff1b;…