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 工 ...
随机推荐
- KTV点歌系统播放原理
北大青鸟KTV点歌系统播放原理 指导老师--原玉明 1.首先知道有两个类(PlayList Song) PlayList类中有一方法 public static bool AddSong(Song ...
- Web Service学习笔记
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- 理解newid()和newsequentialid()
原文地址:http://blog.csdn.net/xushichang/article/details/4390957 1.:newsequentialid 函数比起 newid 函数最大的好处是: ...
- Bzoj 2252: [2010Beijing wc]矩阵距离 广搜
2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 563 Solved: 274[Submit][ ...
- Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论
1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 130 Solved: 88[Submi ...
- 解决windows10搜索不到内容的问题
windows 10的搜索突然搜不到程序了, 网上查询说要重建索引,方法如下: 1.按ctr+R键,输入%LocalAppData%\Packages\windows.immersivecontrol ...
- hdu 4758 Walk Through Squares
AC自动机+DP.想了很久都没想出来...据说是一道很模板的自动机dp...原来自动机还可以这么跑啊...我们先用两个字符串建自动机,然后就是建一个满足能够从左上角到右下角的新串,这样我们直接从自动机 ...
- Yii2 ActiveForm表单自定义样式
实例: <?php $form = ActiveForm::begin([ 'fieldConfig' => [ 'template' => '<div class=" ...
- composer 常用命令
composer list 列出所有可用的命令 composer init 初始化 composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖 ...
- Android APK反编译具体解释(附图)
这段时间在学Android应用开发,在想既然是用Java开发的应该非常好反编译从而得到源码吧,google了一下,确实非常easy,下面是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的 ...