PHP设计模式之:外观模式
外观模式:
外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,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设计模式之:外观模式的更多相关文章
- 每天一个设计模式-2 外观模式(Facade)
每天一个设计模式-2 外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...
- C#设计模式(11)——外观模式(Facade Pattern)
一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 设计模式之 外观模式详解(Service第三者插足,让action与dao分手)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,LZ今天给各位分享一 ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- 北风设计模式课程---外观模式(Facade)总结
北风设计模式课程---外观模式(Facade)总结 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备 ...
- js设计模式——2.外观模式
js设计模式——2.外观模式
- python设计模式之外观模式
python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...
- java设计模式之外观模式(门面模式)
针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下. 一.概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口.这种类型的设计 ...
- 【GOF23设计模式】外观模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_外观模式.公司注册流程.迪米特法则 package com.test.facade; public interface 工 ...
随机推荐
- android 更新uI主线程
http://www.cnblogs.com/wenjiang/p/3180324.html handleMessage 好用
- 【leetcode】编辑距离
dp方程“ 1.初始化:dp[0][i]=i; dp[j][0]=j; 2.dp[i][j]= dp[i-1][j-1](相等) dp[i-1][j]+1 ,,dp[i][j-1]+1 ...
- Android TextView : “Do not concatenate text displayed with setText”
参考:http://stackoverflow.com/questions/33164886/android-textview-do-not-concatenate-text-displayed-wi ...
- 3 视频里weekend05、06、07的可靠性 + HA原理、分析、机制 + weekend01、02、03、04、05、06、07的分布式集群搭建
现在,我们来验证分析下,zookeeper集群的可靠性 现在有weekend05.06.07 将其一个关掉, 分析,这3个zookeeper集群里,杀死了weekend06,还存活weekend05. ...
- linux下如何执行PHP脚本
Linux 下如何直接执行 php 脚本? 下面是部分 php 命令行参数. 用法 php [-q] [-h] [-s] [-v] [-i] [-f ] | { [args...]} -q 安静模式, ...
- 校友信息管理&SNS互动平台之前言、目录及说明
开篇 刚刚主持完成了某985大学(为了保密和避免广告嫌疑,此处不指出具体大学的名称)的“校友信息管理系统&SNS互动平台”大型项目,本着总结经验,技术共享的原则,本系列文章将全面介绍该项目的需 ...
- 【python自动化第七篇:面向对象进阶】
知识点概览: 静态方法,类方法,属性方法 类的特殊方法 反射 异常处理 socket开发基础 一.静态方法:@staticmethod 只是名义上归类管理,实际上在静态方法里访问不了类或者实例中的任何 ...
- hadoop2.2.0集群安装
位说明. 位).Jdk使用的1.7(1.6也可以).网络配置好,相互可以ping通,java环境安装完毕. 第一部分 Hadoop 2.2 下载 位). 下载地址:http://apache.cl ...
- Matlab mex编程
经典教程:mex 编程 http://classes.soe.ucsc.edu/ee264/Fall11/cmex.pdf Matlab 快速编程: http://www.ee.columbia.ed ...
- Chapter 4 - How to Fire some Bullets
Now, we want to let the hero fire some bullets to kill the enemies, add the codes below to set the l ...