首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

外观模式

外观模式 外观模式Facade Pattern又称为门面模式,它是一种对象结构型模式,外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口...外观模式也是迪米特法则的体现,通过引入一个新的外观类可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。...外观模式还要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道,能够降低系统的复杂程度...通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。...在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了开闭原则。

48830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    外观模式

    外观模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。————《设计模式:可复用面向对象软件的基础》 外观模式是一种对象结构型模式。...角色 客户角色(Client):调用外观角色 外观角色(Facade):知道哪些子系统负责处理请求,将客户端的请求转发给适当的子系统对象。...模式扩展 一个系统可以有多个外观类 在一个系统中可以设计多个外观类,每个外观类都负责和一些特定的子系统交互,向用户提供相应的业务功能 不要试图通过外观类为子系统增加新行为 这个装饰者模式所做的事情,为某个对象动态增加新的行为...外观模式与迪米特法则 外观模式是迪米特法则的践行者,遵循着让客户端知道最少的原则,实现客户端和子系统类的解耦 抽象外观类的引入 外观模式不符合“开闭模式”,当子系统类增加或者减少的时候,都需要修改外观类中的方法...引入抽象外观类在一定程度上解决了这个问题,但是维护抽象外观类及其子类也需要一定的成本。 优点 1、解耦。降低客户端与子系统类耦合性,增加和删除子系统类只需要修改外观类即可。

    35610

    外观模式

    组成 外观模式主要由两个角色组成:外观(Facade),子系统(SubSystem)组成, 外观(Facade)角色:此角色知晓相关的(一个或者多个)子系统的功能和责任,负责将客户的请求交给合适的子系统...在外观模式中,外观类Facade的方法OperationWrapper就是实现多个Client的请求。 实用场合 那么在什么场合可以考虑使用外观模式呢? 当你要为一个复杂子系统提供一个简单接口时。...1)当需要使用一个现有的类而其接口并不符合你的需要时,就是用适配器; 2)当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观; 3)适配器改变接口以符合客户的期望; 4)外观将客户从一个复杂的子系统中解耦...; 5)实现一个适配器可能需要一番功夫,也可能不费功夫,视目标接口的大小与复杂度而定; 6)实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行; 7)适配器模式有两种形式:对象适配器和类适配器...类适配器需要用到多重继承; 8)可以为一个子系统实现一个以上的外观; 9)适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象“包装”起来以简化其接口。

    64580

    外观模式

    外观模式遵守的面向对象的原则之一:迪米特法则。 外观模式也叫门面模式。 迪米特法则(最少知道法则) 一个软件实体应当尽可能少的与其他实体直接发生相互作用(耦合)。 ?...角色 Facade: 外观角色 SubSystem:子系统角色 UML 图 ?...tomcat 中使用了大量的外观模式(比如:HttpRequestFacade),不过它的巧妙之处在于只将别的模块感兴趣的数据封装起来,通过外观模式对其他模块提供。...通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。...缺点 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了"开闭原则"。 总结 解耦客户端和子系统之间的关系,更好的封装。方便模块与模块之间的数据交互。

    45910

    外观模式(Facade)

    解决方案 外观类为包含许多活动部件的复杂子系统提供一个简单的接口。与直接调用子系统相比,外观提供的功能可能比较有限,但它却包含了客户端真正关心的功能。...创建附加外观(Additional Facade)类可以避免多种不相关的功能污染单一外观,使其变成又一个复杂结构。客户端和其他外观都可使用附加外观。...在一个新的外观类中声明并实现该接口。外观应将客户端代码的调用重定向到子系统中的相应对象处。如果客户端代码没有对子系统进行初始化,也没有对其后续生命周期进行管理,那么外观必须完成此类工作。...如果外观变得过于臃肿,你可以考虑将其部分行为抽取为一个新的专用外观类。...参考原文:外观设计模式

    40530

    JS 外观模式

    简介 外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模块定义了一个高层接口,这个接口值得这一子系统更加容易使用。 外观模式在JS中常常用于解决浏览器兼容性问题。 2....实现 外观模式不仅简化类中的接口,而且对接口与调用者也进行了解耦。外观模式经常被认为开发者必备,它可以将一些复杂操作封装起来,并创建一个简单的接口用于调用。...外观模式经常被用于JavaScript类库里,通过它封装一些接口用于兼容多浏览器,外观模式可以让我们间接调用子系统,从而避免因直接访问子系统而产生不必要的错误。...外观模式的优势是易于使用,而且本身也比较轻量级。但也有缺点 外观模式被开发者连续使用时会产生一定的性能问题,因为在每次调用时都要检测功能的可用性。...总结 那么何时使用外观模式呢?一般来说分三个阶段: 在设计初期,应该要有意识地将不同的两个层分离,比如经典的三层结构,在数据访问层和业务逻辑层、业务逻辑层和表示层之间建立外观Facade。

    1.3K40

    设计模式---外观模式

    外观模式 模式动机 模式定义 模式结构 角色 模式分析 典型的外观角色代码 外观模式实例与解析 实例一:电源总开关 实例二:文件加密 模式优缺点 优点 缺点 模式适用环境 源码分析外观模式的典型应用...(1) 外观模式应用于JDBC数据库操作 (2) Session外观模式是外观模式在Java EE框架中的应用 模式扩展 一个系统有多个外观类 不要试图通过外观类为子系统增加新行为 外观模式与迪米特法则...抽象外观类的引入 总结 参考文章 ---- 模式动机 引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。...,它处理由外观类传过来的请求;子系统并不知道外观的存在,对于子系统而言,外观角色仅仅是另外一个客户端而已。...---- 抽象外观类的引入 外观模式最大的缺点在于违背了“开闭原则”,当增加新的子系统或者移除子系统时需要修改外观类,可以通过引入抽象外观类在一定程度上解决该问题,客户端针对抽象外观类进行编程。

    27520

    设计模式——外观模式

    5)、通过合理的使用外观系统,可以更好的帮我们划分访问层次,当系统需要层次设计时,可以考虑外观模式。   ...,使用外观模式好,还是直接调用模块好。...外观模式的主要缺点如下:    1)、不能很好地限制客户端使用子类系统。    2)、增加了新的子类系统可能需要修改外观类。...二、外观模式结构类图 ---- 外观(Facade)模式的结构比较简单,主要是定义了一个高层接口。它包含了对各个子系统的引用,客户端可以通过访问外观类来访问各个子系统的功能。  ...外观模式主要包含一下三种角色:    【1】、外观(Facade)角色:为多个子系统对外提供一个共同的接口。

    59830

    设计模式-外观模式

    外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,通过这个接口使得这一个子系统更加容易使用...角色 外观模式主要包含如下角色: Facade(外观角色):统一的高层接口,通过该角色将客户端的请求委托到不同的子系统。 SubSystem(子系统角色):相当于零件,多个零件组合完成一个功能。...外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。...外观模式的目的在于降低系统的复杂程度。外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观角色即可调用相关功能。...通过引入外观模式,客户代码将变得很简单,与之关联的对象也很少。 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。

    38010
    领券