外观模式:
外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,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();