阅读目录
- 项目目录结构
- 动物接口
- 实体鸡工厂
- 实体猪工厂
- 外观类
- 运行 php test.php
项目目录结构
- 结构型模式 - php外观模式
- 把系统中类的调用委托给一个单独的类,对外隐藏了内部的复杂性,很有依赖注入容器的感觉哦
目录: D:\facade
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/9/16 10:19 178 AnimalInterface.php
-a---- 2021/9/16 10:19 708 AnimalMaker.php
-a---- 2021/9/16 10:19 238 Chicken.php
-a---- 2021/9/16 10:19 234 Pig.php
-a---- 2021/9/16 10:19 753 test.php
动物接口
<?php
namespace facade;
# 动物接口
interface AnimalInterface
{
# 生产方法
public function produce();
}
实体鸡工厂
<?php
namespace facade;
# 实体鸡工厂
class Chicken implements AnimalInterface
{
# 生产鸡
public function produce()
{
echo "生产了一只鸡~ \n";
}
}
实体猪工厂
<?php
namespace facade;
# 实体猪工厂
class Pig implements AnimalInterface
{
# 生产猪
public function produce()
{
echo "生产了一只猪~ \n";
}
}
外观类
<?php
namespace facade;
# 外观类
class AnimalMaker
{
private $_chicken; # 鸡实工厂例 * @var object
private $_pig; # 猪实工厂例 * @var object
# 构造函数
public function __construct()
{
$this->_chicken = new Chicken();
$this->_pig = new Pig();
}
# 生产方法 * 生产鸡
public function produceChicken()
{
$this->_chicken->produce();
}
# 生产方法 * 生产猪
public function producePig()
{
$this->_pig->produce();
}
}
运行 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();
生产了一只猪~
生产了一只鸡~