zoukankan      html  css  js  c++  java
  • 外观模型

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

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

    实现:
    代码示例:

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

  • 相关阅读:
    支持向量机(SVM)
    MapReduce(二) MR的高级特性-序列化、排序、分区、合并
    HDFS(二) 底层通信原理——RPC 及 动态代理
    HDFS(一) 高级特性
    UML类图中最重要的几种类关系及其表示
    不同.c文件中声明的全局变量的使用理解
    全局变量和局部变量
    转载 永远不要在.h文件中定义变量!
    LabVIEW介绍
    C语言程序注释风格
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9657290.html
Copyright © 2011-2022 走看看