首页 > 其他分享 >外观模式(facade pattern)

外观模式(facade pattern)

时间:2024-03-01 13:45:09浏览次数:26  
标签:外观 pattern 系统 模式 门面 facade 子系统 客户端

外观模式(facade pattern)
外观模式( Facade Pattern),也叫门面模式, 外观模式的原始定义是:为子系统中的一组接口提供统一的接口。它定义了一个更高级别的接口,使子系统更易于使用。外观模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。 门面模式有点类似之前讲到的迪米特法则(最少知识原则)和接口隔离原则:两个有交互的系统,只暴露有限的必要的接口

外观模式的优点:
1. 它对客户端屏蔽了子系统组件,减少了客户端所需要处理的对象数目,并使子系统使用起来更加的容易.通过引入外观模式,客户端代码将变得很简单,与之关联的对象也很少.
2. 它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可
3. 一个子系统的修改对其他子系统没有任何影响,而子系统内部变化也不会影响到外观对象.
外观模式缺点:
1. 不能很好的控制客户端直接使用子系统类,如果客户端访问子系统类做太多的限制则减少了可变性和灵活性.
2. 如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则.
使用场景分析:
简化复杂系统。 比如,当我们开发了一整套的电商系统后(包括订单、商品、支付、会员等系统),我们不能让用户依次使用这些系统后才能完成商品的购买,而是需要一个门户网站或手机 App 这样简化过的门面系统来提供在线的购物功能。减少客户端处理的系统数量。 比如,在 Web 应用中,系统与系统之间的调用可能需要处理 Database 数据库、Model 业务对象等,其中使用Database 对象就需要处理打开数据库、关闭连接等操作,然后转换为Model 业务对象,实在是太麻烦了。如果能够创建一个数据库使用的门面
(其实就是常说的 DAO 层),那么实现以上过程将变得容易很多。让一个系统(或对象)为多个系统(或对象)工作。 比如,线程池ThreadPool 就是一个门面模式,它为系统提供了统一的线程对象的创建、销毁、使用等。联合更多的系统来扩展原有系统。 当我们的电商系统中需要一些新功能时,比如,人脸识别,我们可以不需要自行研发,而是购买别家公司的系统来提供服务,这时通过门面系统就能方便快速地进行扩展。作为一个简洁的中间层。 门面模式还可以用来隐藏或者封装系统中的分层结构,同时作为一个简化的中间层来使用。比如,在秒杀、库存、钱包等场
景中,我们需要共享有状态的数据时(如商品库存、账户里的钱),在不改变原有系统的前提下,通过一个中间的共享层(如将秒杀活动的商品库存总
数统一放在 Redis 里),就能统一进行各种服务(如,秒杀详情页、商品详情页、购物车等)的调用。

 

标签:外观,pattern,系统,模式,门面,facade,子系统,客户端
From: https://www.cnblogs.com/HelloWorldKivsenTrprio/p/18046285

相关文章

  • 桥接模式(bridge pattern)
    定义:将抽象部分与它的实现部分分离,使他们都可以独立地变化桥接模式使用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,使得系统更加灵活,并易于扩展,有效的控制了系统中的类的个数(避免了继承层次的指数级爆炸),将两......
  • 23 design patterns
    ///-----------------23个设计模式是7个原则的具体形式,7原则是23个模式的凝练------------------//////-----------------target:高内聚、低耦合------------------///1.软件设计模式结构类比就是结构class或者是结构体行为类比class里面的函数创造的话,是构造出结构,让......
  • [Rust] Handle errors in Rust using Pattern Matching
    Inthislessonwe'llexplorehowtounwrapa Result typeusingalanguagefeaturecalledPatternMatching. usestd::io;fnmain(){letmutfirst=String::new();io::stdin().read_line(&mutfirst).unwrap();letmuta:u32=......
  • 读论文-基于序列模式的电子商务推荐系统综述(A Survey of Sequential Pattern Based E
    前言今天读的论文为一篇于2023年10月3日发表在《算法》(Algorithms)的论文,这篇文章综述了基于序列模式的电子商务推荐系统,强调了通过整合用户购买和点击行为的序列模式来提高推荐准确性、减少数据稀疏性、增加推荐新颖性,并改善推荐系统的可扩展性。文章详细分析了现有推荐系统的......
  • el-form表单使用pattern自定义校验规则
    //正则校验的正则表达式,这里注意正则表达式中的‘\’要使用‘\\’转义constpatterns={"name":"^[a-zA-Z_][0-9a-zA-Z_]{0,}$","tel":"^1[2-9]\\d{0,}$","email":"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-......
  • design pattern 7 原则
    ///-----------------23个设计模式对对7个原则的具体形式,7原则是23个模式的凝练------------------//////-----------------target:高内聚、低耦合------------------///单一职责原则(SingleResponsibilityPrinciple-SRP):一个类应该只有一个引起变化的原因。换句话说,一......
  • 外观模式
    外观模式: 优点: 1.对客户端屏蔽了子系统组件,减少了客户端所需要处理的对象数目,并使子系统使用起来更加容易,通过引入外观模式客户端代码将变得很简单,与之关联的对象也很少 2.它实现了子系统域客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整......
  • Java中正则表达式(regex)匹配多行(Pattern.MULTILINE和Pattern.DOTALL模式)
    ​ Java中,正则表达式(regex)的处理是通过Pattern类实现的。Pattern类提供了多种标志(flags)来修改正则表达式的行为。其中,Pattern.MULTILINE和Pattern.DOTALL是两个常用的模式,它们分别用于处理多行文本和让.匹配包括行终止符在内的任意字符。 参考文档:Java中正则表达式(regex)匹......
  • Go 100 mistakes - #11: Not using the functional options pattern
      Here,WithPortreturnsaclosure.Aclosureisananonymousfunctionthatreferences variablesfromoutsideitsbody;inthiscase,theportvariable.Theclosurerespectsthe Optiontypeandimplementstheport-validationlogic.Eachconfigfieldr......
  • 设计模式--策略模式(Strategy Pattern)
    策略模式(StrategyPattern)是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户端。策略模式主要包含以下几个角色:Strategy(策略):这是一个接口,通常用于定义所有支持的算法的公共接口。ConcreteStrategy(具体策略):这是实现了S......