外观模型

问题:
使用子系统的代码时,如果过于深入地调用子系统的逻辑代码,会导致代码耦合度过高,当子系统代码发生变化时,调用它的许多地方也需要进行相应的修改。为了避免这种情况的发生,我们需要为一个分层或一个子系统创建一个简单、清晰的对外接口。

概念:
为子系统中的一组接口提供一个一致的界面,此模型定义了一个高层接口,供外界调用,这个接口使得这一子系统更加容易使用。

实现:
代码示例:

class Product
{
	public $id;
	public $name;
	public function __construct($id, $name)
	{
		$this->id = $id;
		$this->name = $name;
	}
}
class ProductFacade
{
	private $products = [];

	public function __construct($file)
	{
		$this->file = $file;
		$this->compile();
	}

	private function compile()
	{
		$lines = $this->getProductFileLines($this->file);
		foreach($lines as $line) {
			$id = $this->getIdFromLine($line);
			$name = $this->getNameFromLine($line);
			$this->products[$id] = $this->getProductObjectFromId($id, $name);
		}
	}

	private function getProductFileLines($file)
	{
// ...
	}

	private function getIdFromLine($line)
	{
// ...
	}

	private function getNameFromLine($line)
	{
// ...
	}

	private function getProductObjectFromId($id, $name)
	{
		return new Product($id, $name);
	}

	public function getProducts()
	{
		return $this->products;
	}
}
$facade = new ProductFacade('test.txt');
$products = $facade->getProducts();

效果:
1. 有助于分离项目中的不同部分。
2. 客户端的访问代码变得简洁,方便。
3. 只在一个地方调用子系统,减少了出错的可能性,并因此可以预估子系统修改带来的问题所在。

转载于:https://www.cnblogs.com/wujuntian/p/9657290.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值