外观模式用于为复杂系统创建一个简单清晰的接口。
当我们需要使用到子系统的代码时,为了避免过去深入地调用子系统代码而导致后期代码难以维护,减低代码和子系统的耦合性,我们需要在代码和子系统中引入一个入口。实际上就是在子系统代码进行一次封装,那么我们在调用子系统代码的时候就可以通过调用封装的方法来调用,以致于后期修改子系统代码时不会对我们的代码有很大的影响。
下面通过一个例子来简单演示一下外观模式。
假设我们原先有一些方法,用这些方法可以完成向一个好友发送hello,
//寻找目标好友
function searchFriend($name){
echo "寻找目标好友:$name";
}
//打开聊天窗口
function openWindow($name){
echo "打开$name的聊天窗口";
};
//发送hello
function sayHello(){
echo "sayhello";
}
当我们每次想要找好友say hello的时候,都要调用这一系列方法,如果后期系统升级或者代码修改,都需要修改我们调用这些代码的地方,如果你的代码已经遍布了子系统代码,那么这样的维护升级的工作量将是巨大的。为了避免这种情况,我们使用外观模式来解决这个问题:
class chatFacade{
private $name;
public function __construct($friend){
$this->name=$friend;
}
public function chat(){
searchFriend($this->name);
openWindow($this->name);
sayHello();
}
}
在使用的时候,现在我们只需:
$obj=new chatFacade('manyhong');
$obj->chat();
为复杂系统创建简单接口的好处是明显的,但是另一方面你可能会过度抽象系统。如果想要使客户端访问代码变得简介或者想把系统中的修改对客户端代码隐藏,使用外观模式吧。