• 外观模型


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

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

    实现:
    代码示例:

    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. 只在一个地方调用子系统,减少了出错的可能性,并因此可以预估子系统修改带来的问题所在。

  • 相关阅读:
    perl6中函数参数(2)
    perl6中函数参数(1)
    上传绕过(转载)
    perl6中的hash定义(1)
    mssql手工注入2
    mssql手工注入1
    mssql注入中的储存用法删除与恢复
    perl 复制exe文件的简单方法
    python shell
    perl中设置POST登录时的重定向
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9657290.html
Copyright © 2020-2023  润新知