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

  • 相关阅读:
    Keil(MDK) 5 软件安装教程
    JPA 的specification动态查询
    idea 建立JPA项目(二)
    HBase单节点的安装与配置
    【codevs3012+codevs3037】线段覆盖4+线段覆盖5(DP)
    MySQL下载和安装教程
    二、单线程的 JavaScript
    #JS 基础之异步(一)
    JS 基础之: 继承的 六 种实现方式
    源码浅析-Vue3中的13个全局Api
  • 原文地址:https://www.cnblogs.com/wujuntian/p/9657290.html
Copyright © 2011-2022 走看看