外观模型

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

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

实现:
代码示例:

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