php设计模式中间件模式,外观模式_设计模式_设计模式之外观模式 - Lane Blog

13

17

Clicks: 2133 Date: 2014-04-22 21:54:52 Power By 李轩Lane

外观模式其实非常容易用到,是对迪米特法则的一种应用:降低类的耦合度,添加中间件。也是对依赖倒转原则的完美体现:针对接口的编程。

外观模式:再次针对某个接口封装一个高层类,实现一个高层接口,按某种算法或使用方式整合底层接口类,使得底层的接口更加容易使用,也降低了底层接口和客户端的耦合度。

场景:调用数据库。以PHP为代码环境,以Mysql为数据库环境。

class MysqlDB{

private $conn;

public function __construct($host, $username, $password, $dbName){

$this->conn($host, $username, $password);

$this->selectDb($dbName);

}

private function conn($host, $username, $password){

$this->conn = mysql_connect($host, $username, $password);

}

private function selectDb($dbName){

mysql_select_db($dbName, $this->conn);

}

public function query($sql){

return mysql_query($sql);

}

public function fetchArray($queryResult){

return mysql_fetch_array($queryResult);

}

public function fetchAssoc($queryResult){

return mysql_fetch_assoc($queryResutl);

}

}

class Facade{

private $mysqlObj;

public function __construct($host, $username, $password, $dbName){

$this->mysqlObj = new MysqlDB($host, $username, $password, $dbName);

}

public function get($tableName){

$sql = 'SELECT * FROM ' . $tableName;

$queryResult = $this->mysqlObj->query($sql);

$fetchArr = $this->myqlObj->fetchAssoc($queryResult);

return $fetchArr

}

}

//客户端/接口

$obj = new Facade('localhost', 'root', 'root', 'db_name');

$list = $obj->get('user_info');

?>

常见的使用场景:

1、开发的初期阶段,有意识的建立中间件,将不同的两层分离,在层与层之间建立外观。

2、在开发阶段,某个类会根据需求的不断变更等原因使类变得更加复杂而庞大,增加一个外观类,使的使用者和这个庞大负责的类耦合降低。

3、历史遗留问题。需要用到遗留的复杂逻辑的类,直接调用是不好的,所以需要一个中间件(外观模式的外观类)来调用这个复杂类,而使用者调用外观类即可。

可以理解为,外观模式的外观类,是一个入口,使用者调用外观类,外观类调用底层的类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值