外观模式:只是为一个分层或子系统创建一个单一的入口。
- 优点:1. 有助于分离项目中的不同部分
2. 对于客户端来说,访问代码变得简洁、方便
3. 由于只在一个地方调用子系统减少了出错的可能性,并因此可以预估子系统修改带来的问题所在
<?php
class SubSystemOne
{
public function MethodOne()
{
print "子系统方法1<br />";
}
}
class SubSystemTwo
{
public function MethodTwo()
{
print "子系统方法2<br />";
}
}
class SubSystemThree
{
public function MethodThree()
{
print "子系统方法3<br />";
}
}
class SubSystemFour
{
public function MethodFour()
{
print "子系统方法4<br />";
}
}
class Facade
{
public $one;
public $two;
public $three;
public $four;
function __construct()
{
$this->one = new SubSystemOne();
$this->two = new SubSystemTwo();
$this->three = new SubSystemThree();
$this->four = new SubSystemFour();
}
function MethodA()
{
print "<br /> 方法组A()-----<br />";
$this->one->MethodOne();
$this->two->MethodTwo();
$this->four->MethodFour();
}
function MethodB()
{
print "<br />方法组B()----<br />";
$this->two->MethodTwo();
$this->three->MethodThree();
}
function MethodN()
{
}
}
$facade = new Facade();
$facade->MethodA();
$facade->MethodB();
- 使用:
- 在设计初期阶段,有意识的将不同的两个层分离
- 在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,给调用它们的用户带来了使用上的困难,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖
- 在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展,但又包含新的需求开发必须依赖的重要功能,此时可以为新系统开发一个外观Facade类,来提供设计旧系统比较清晰的简单接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作。