CleverCode最近在看外观模式。
1 模式介绍
为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
2 模式中的角色
2.1 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。
2.2 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。
3 模式结构
4 项目
4.1 设计一个商场统一购买家电和家具的场景。
4.2 源码设计
<?php
/**
* php外观模式
* copyright (c) http://blog.csdn.net/CleverCode
*
*/
//家电-冰箱
class BingXiang
{/*{{{*/
public function buy()
{
echo "买冰箱\r\n";
}
}/*}}}*/
//家电-洗衣机
class XiYiJi
{/*{{{*/
public function buy()
{
echo "买洗衣机\r\n";
}
}/*}}}*/
//家具-创
class Chuang
{/*{{{*/
public function buy()
{
echo "买床\r\n";
}
}/*}}}*/
//家具-衣柜
class YiGui
{/*{{{*/
public function buy()
{
echo "买衣柜\r\n";
}
}/*}}}*/
//商场(Facade)
class ShangChang
{/*{{{*/
public $bingXiang;
public $xiYiJi;
public $chuang;
public $yiGui;
public function __construct()
{
$this->bingXiang = new BingXiang();
$this->xiYiJi = new XiYiJi();
$this->chuang = new Chuang();
$this->yiGui = new YiGui();
}
//家电
public function buyJiaDian()
{/*{{{*/
$this->bingXiang->buy();
$this->xiYiJi->buy();
}/*}}}*/
//家具
public function buyJiaJu()
{/*{{{*/
$this->chuang->buy();
$this->yiGui->buy();
}/*}}}*/
}/*}}}*/
class Client
{/*{{{*/
public static function main($argv)
{
$shangChang = new ShangChang();
//买家电
$shangChang->buyJiaDian();
//买家具
$shangChang->buyJiaJu();
}
}/*}}}*/
Client::main($argv);
?>
4.3 结果展示
技术交流
CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师俱乐部):517133582。加群和腾讯,阿里,百度,新浪等公司的架构师交流。【架构师俱乐部】宗旨:帮助你成长为架构师!