门面模式核心内容:

  • 客户端与子系统的通信通过外观对象进行;
  • 外观对象封装一系列子系统的具体对应方法,对客户端只需暴露一个单一的入口方法;
  • 客户端通过访问外观对象即可调用子系统的基础方法,无需关心子系统的具体实现;
  • 可以通过引入抽象外观类解决增减子系统需要修改外观类的问题;
  • 可以通过引入外部配置文件实现外观对象与不同子系统的绑定关系;
  • 外观模式可以有效降低客户端与子系统的耦合度,客户端只与外观对象交互,不关心子系统的复杂细节;
  • 一个系统通常只需要一个外观类,一般情况下外观类为单例模式;

先定义两个子系统,子系统有各自的操作方法:

class SystemA
{
public function operationA()
{
//
}
} class SystemB
{
public function operationB()
{
//
}
}

定义一个外观类,提供单一入口,内部负责调用子系统的方法:

class Facade
{
private $systemA;
private $systemB; public function __construct()
{
$this->systemA = new SystemA;
$this->systemB = new SystemB;
} public function operation()
{
$this->systemA->operationA();
$this->systemB->operationB();
}
}

定义客户端,客户端只需要与外观类交互即可实现对子系统的调用:

class Client
{
public function main()
{
(new Facade)->operation();
}
}

深入 Laravel 内核之外观模式(门面模式)的更多相关文章

  1. 外观模式 门面模式 Facade 结构型 设计模式(十三)

    外观模式(FACADE) 又称为门面模式   意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统 ...

  2. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用

    在C#中实现的基于外观或门面模式打造的业务应用案例 以前一直没有想过写一些东西来把项目中用到的知识点及技术实现做一个归纳整理并分享出来.现在打算逐渐的把项目中的一些东西整理并分享出来,与大家共勉! 外 ...

  3. 设计模式 | 外观模式/门面模式(facade)

    定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 结构:(书中图,侵删) 一个简洁易用的外观类 一个复杂的子系统   实例: 书中提到了理 ...

  4. java设计模式——外观模式(门面模式)

    一. 定义与类型 定义:门面模式,提供一个统一的接口,用来访问子系统中的一群接口,门面模式定义了一个高层接口,让子系统更容易使用 类型:结构性 二. 使用场景 子系统越来越复杂,增加外观模式提供简单调 ...

  5. java设计模式----外观模式(门面模式)

    外观模式主要应用场景在于为复杂的子系统提供一个简单的接口,提高子系统的独立性. 创建DrawerOne类: package facade; public class DrawerOne { publi ...

  6. 设计模式之——外观or门面模式

    1.概念 定义一个高层的统一的外观接口类,该接口用于客户端调用,和一个实现类用来包装子系统中多个类,客户端可以通过客户端完成对子系统的方法调用. 2.适用场景 2.1 代码移植,降低了现有系统的复杂度 ...

  7. Facade 门面模式 外观模式

    简介 作用: (1)封装一组交互类,一致地对外提供接口 (2)封装子系统,简化子系统调用 JDK中体现:java.util.logging包 java.lang.Class javax.faces.w ...

  8. JavaScript设计模式(6)-门面模式

    门面模式 门面模式(Facade Pattern):他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计模式属于结构性模式.为子系统中的一组接口提供了一个统一的访问接口,这个接 ...

  9. java设计模式5.组合模式、门面模式、享元模式、桥接模式

    组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...

随机推荐

  1. ligerUI 关闭父弹窗JS报错问题 解决方法

    1:调用父窗口某一个文件框,获取焦点, parent.window.document.getElementById("roleName").focus(); 2:关闭父窗口pare ...

  2. ES在项目中的测试

    1.application.yml server: port: ${port:40100}spring: application: name: xc-search-servicexuecheng: e ...

  3. layui-入门

    1.下载layui 2.导入layui <title>开始使用layui</title> <!-- 导入js样式 --> <link rel="st ...

  4. 【力扣】146. LRU缓存机制

    运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果关键字 (key) ...

  5. 从Rest到Graphql

    一.引言 ok,如图所示,我在去年曾经写过一篇文章<闲侃前后端分离的必要性>.嗯,我知道肯定很多人没看过.所以我做一个总结,其实啰里八嗦了一篇文章,就是想说一下现在的大型互联网项目一般是如 ...

  6. MySQL如何使用coalesce函数

    coalesce(a,b,c); 参数说明:如果a==null,则选择b:如果b==null,则选择c:如果a!=null,则选择a:如果a b c 都为null ,则返回为null(没意义)

  7. 自定义日历(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 日历有三种:标准日历.24小时日历和夜班日历. 但这三种在现实中远远不够用,别的不说,就说那个标准日历,默认是8点到12点 ...

  8. CF1494A ABC String 题解

    Content 给定 \(T\) 个仅包含大写字母 A,B,C 的字符串 \(s\).问你是否能够通过将每个 A,B,C 换成 (,) 中的一个(同一个字母必须要换成同一个字符),使得最后得到的括号序 ...

  9. 8-1yum私有云仓库

    针对centos8的BaseOS.AppStream源 yum -y install httpd systemctl enable --now httpd mkdir -pv /var/www/htm ...

  10. 使用.NET 6开发TodoList应用文章索引

    系列导航 使用.NET 6开发TodoList应用(1)--系列背景 使用.NET 6开发TodoList应用(2)--项目结构搭建 使用.NET 6开发TodoList应用(3)--引入第三方日志 ...