php外观模式

45 阅读1分钟

 把系统中类的调用委托给一个单独的类,对外隐藏了内部的复杂性,很有依赖注入容器的感觉哦

<?php
namespace facade;

/**
 * 动物接口
 */
interface AnimalInterface
{
  /**
   * 生产方法
   *
   * @return string
   */
  public function produce();
}
<?php
namespace facade;

/**
 * 实体鸡工厂
 */
class Chicken implements AnimalInterface
{
  /**
   * 生产鸡
   *
   * @return string
   */
  public function produce()
  {
    echo "生产了一只鸡~ \n";
  }
}
<?php
namespace facade;

/**
 * 实体猪工厂
 */
class Pig implements AnimalInterface
{
  /**
   * 生产猪
   *
   * @return string
   */
  public function produce()
  {
    echo "生产了一只猪~ \n";
  }
}
<?php
namespace facade;

/**
 * 外观类
 */
class AnimalMaker
{
  /**
   * 鸡实工厂例
   * @var object
   */
  private $_chicken;

  /**
   * 猪实工厂例
   * @var object
   */
  private $_pig;

  /**
   * 构造函数
   *
   * @return void
   */
  public function __construct()
  {
    $this->_chicken = new Chicken();
    $this->_pig     = new Pig();
  }

  /**
   * 生产方法
   *
   * 生产鸡
   * @return string
   */
  public function produceChicken()
  {
    $this->_chicken->produce();
  }

  /**
   * 生产方法
   *
   * 生产猪
   * @return string
   */
  public function producePig()
  {
    $this->_pig->produce();
  }
}
<?php
/**
 * 结构型模式
 *
 * php外观模式
 * 把系统中类的调用委托给一个单独的类,对外隐藏了内部的复杂性,很有依赖注入容器的感觉哦
 *
 *   
 * @example 运行 php test.php
 */


// 注册自加载
spl_autoload_register('autoload');

function autoload($class)
{
  require dirname($_SERVER['SCRIPT_FILENAME']) . '//..//' . str_replace('\\', '/', $class) . '.php';
}

/************************************* test *************************************/

use facade\AnimalMaker;

// 初始化外观类
$animalMaker = new AnimalMaker();

// 生产一只猪
$animalMaker->producePig();

// 生产一只鸡
$animalMaker->produceChicken();