原文链接:http://www.orlion.ga/744/
解释:
通过在必须的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了来自调用对象的复杂性。
代码:
/**
* 外观模式
*
*/
class SwitchFacade
{
private $_light = null; //电灯
private $_ac = null; //空调
private $_fan = null; //电扇
private $_tv = null; //电视
public function __construct()
{
$this->_light = new Light();
$this->_fan = new Fan();
$this->_ac = new AirConditioner();
$this->_tv = new Television();
}
/**
* 晚上开电灯
*
*/
public function method1($isOpen =1) {
if ($isOpen == 1) {
$this->_light->on();
$this->_fan->on();
$this->_ac->on();
$this->_tv->on();
}else{
$this->_light->off();
$this->_fan->off();
$this->_ac->off();
$this->_tv->off();
}
}
/**
* 白天不需要电灯
*
*/
public function method2() {
if ($isOpen == 1) {
$this->_fan->on();
$this->_ac->on();
$this->_tv->on();
}else{
$this->_fan->off();
$this->_ac->off();
$this->_tv->off();
}
}
}
/******************************************子系统类 ************/
/**
*
*/
class Light
{
private $_isOpen = 0;
public function on() {
echo 'Light is open', '<br/>';
$this->_isOpen = 1;
}
public function off() {
echo 'Light is off', '<br/>';
$this->_isOpen = 0;
}
}
class Fan
{
private $_isOpen = 0;
public function on() {
echo 'Fan is open', '<br/>';
$this->_isOpen = 1;
}
public function off() {
echo 'Fan is off', '<br/>';
$this->_isOpen = 0;
}
}
class AirConditioner
{
private $_isOpen = 0;
public function on() {
echo 'AirConditioner is open', '<br/>';
$this->_isOpen = 1;
}
public function off() {
echo 'AirConditioner is off', '<br/>';
$this->_isOpen = 0;
}
}
class Television
{
private $_isOpen = 0;
public function on() {
echo 'Television is open', '<br/>';
$this->_isOpen = 1;
}
public function off() {
echo 'Television is off', '<br/>';
$this->_isOpen = 0;
}
}
/**
* 客户类
*
*/
class client {
static function open() {
$f = new SwitchFacade();
$f->method1(1);
}
static function close() {
$f = new SwitchFacade();
$f->method1(0);
}
}
client::open();
代码来自:http://blog.youkuaiyun.com/hguisu/article/details/7533759,《PHP设计模式》这本书上给出的例子跟建造者模式太像了,而上边的例子很合适,而且原文讲的也很好。