外观模式:

外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用;

外观模式又称为门面模式,它是一种对象结构型模式。

模式结构:

外观模式就是让client客户端以一种简单的方式来调用比较复杂的系统来完成一件事情;

目的:

1、为一个复杂子系统提供简单的接口

2、减少客户端和子系统的耦合

代码实现:

示例1:

  /**

  * 外观模式

  * 通过在必须的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了来自调用对象的复杂性

  */

 /1**

  * 

  * User类

  * @author lzs

  *

  */

 class User

 {

 protected $userName;

 protected $userAge;

 public function setUserName($userName)

 {

 return $this->userName = $userName;

 }

 public function setUserAge($userAge)

 {

 return $this->userAge = $userAge;

 }

 /1**

  * getUser方法

  * 获取用户信息

  */

 public function getUserInfo()

 {

 echo '用户姓名:'.$this->userName.'<br />用户年龄:'.$this->userAge;

 }

 }

 /1**

  * UserFacade外观模式类,简化获取用户getUserInfo方法的调用

  */

 class UserFacade

 {

 public static function getUser($userInfo)

 {

 $User = new User();

 $User->setUserName($userInfo['username']);

 $User->setUserAge($userInfo['userAge']);

 return $User->getUserInfo();

 }

 }

 $userInfo = array(

 'username' => 'lzs',

 'userAge'  => 21,

 );

 //简化调用类

 UserFacade::getUser($userInfo);

示例2:

  /**

  * 外观模式

  */

 /1**

  * 创建多个子系统类

  */ 

 class SubSystem1

 {

 public function method1()

 {

 echo ' subsystem1 method1<br />';

 }

 }

 class SubSystem2

 {

 public function method2()

 {

 echo ' subsystem2 method2<br />';

 }

 }

 class SubSystem3

 {

 public function method3()

 {

 echo ' subsystem3 method3<br />';

 }

 }

 /1**

  * 与子系统通信的外观类,

  * 外部与一个子系统的通信必须通过一个统一的外观对象进行

  */

 class Facade

 {

 private $object1 = null;

 private $object2 = null;

 private $object3 = null;

 public function __construct()

 {

 $this->object1 = new SubSystem1();

 $this->object2 = new SubSystem2();

 $this->object3 = new SubSystem3();

 }

 public function methodFirst()

 {

 echo 'Facade methodFirst<br />';

 $this->object1->method1();

 $this->object2->method2();

 }

 public function methodSecond()

 {

 echo 'Facade methodSecond<br />';

 $this->object2->method2();

 $this->object3->method3();

 }

 }

 $objFacade = new Facade();

 $objFacade->methodFirst();

 $objFacade->methodSecond(); 

PHP设计模式之:外观模式的更多相关文章

  1. 每天一个设计模式-2 外观模式(Facade)

    每天一个设计模式-2  外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...

  2. C#设计模式(11)——外观模式(Facade Pattern)

    一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...

  3. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  4. 设计模式之 外观模式详解(Service第三者插足,让action与dao分手)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,LZ今天给各位分享一 ...

  5. 8.4 GOF设计模式三: 外观模式 Facade

    GOF设计模式三: 外观模式 Facade  “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...

  6. 北风设计模式课程---外观模式(Facade)总结

    北风设计模式课程---外观模式(Facade)总结 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备 ...

  7. js设计模式——2.外观模式

    js设计模式——2.外观模式

  8. python设计模式之外观模式

    python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...

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

    针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下. 一.概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计 ...

  10. 【GOF23设计模式】外观模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_外观模式.公司注册流程.迪米特法则 package com.test.facade; public interface 工 ...

随机推荐

  1. KTV点歌系统播放原理

    北大青鸟KTV点歌系统播放原理 指导老师--原玉明 1.首先知道有两个类(PlayList   Song) PlayList类中有一方法 public static bool AddSong(Song ...

  2. Web Service学习笔记

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

  3. 理解newid()和newsequentialid()

    原文地址:http://blog.csdn.net/xushichang/article/details/4390957 1.:newsequentialid 函数比起 newid 函数最大的好处是: ...

  4. Bzoj 2252: [2010Beijing wc]矩阵距离 广搜

    2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 563  Solved: 274[Submit][ ...

  5. Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论

    1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 130  Solved: 88[Submi ...

  6. 解决windows10搜索不到内容的问题

    windows 10的搜索突然搜不到程序了, 网上查询说要重建索引,方法如下: 1.按ctr+R键,输入%LocalAppData%\Packages\windows.immersivecontrol ...

  7. hdu 4758 Walk Through Squares

    AC自动机+DP.想了很久都没想出来...据说是一道很模板的自动机dp...原来自动机还可以这么跑啊...我们先用两个字符串建自动机,然后就是建一个满足能够从左上角到右下角的新串,这样我们直接从自动机 ...

  8. Yii2 ActiveForm表单自定义样式

    实例: <?php $form = ActiveForm::begin([ 'fieldConfig' => [ 'template' => '<div class=" ...

  9. composer 常用命令

    composer list 列出所有可用的命令 composer init 初始化 composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖 ...

  10. Android APK反编译具体解释(附图)

    这段时间在学Android应用开发,在想既然是用Java开发的应该非常好反编译从而得到源码吧,google了一下,确实非常easy,下面是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的 ...