阅读目录
- 项目应用目录
- 动物接口
- 实体鸡
- 实体猪
- 农场
- 借助最简单的’工厂模式‘来实现享元模式
项目应用目录
- 结构型模式 - php享元(轻量级)模式
- 就是缓存了创建型模式创建的对象。
- 其次,享元强调的缓存对象,外观模式强调的对外保持简单易用,是不是就大体构成了目前牛逼哄哄且满大街的【依赖注入容器】
- 下面我们借助最简单的’工厂模式‘来实现享元模式,就是给工厂加了个缓存池。
目录: D:\flyweight
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/9/16 10:19 181 AnimalInterface.php
-a---- 2021/9/16 10:19 389 Chicken.php
-a---- 2021/9/16 10:19 964 Farm.php
-a---- 2021/9/16 10:19 386 Pig.php
-a---- 2021/9/16 10:19 1083 test.php
动物接口
<?php
namespace flyweight;
# 动物接口
interface AnimalInterface
{
# 类型获取
public function getType();
}
实体鸡
<?php
namespace flyweight;
# 实体鸡
class Chicken implements AnimalInterface
{
private $_type = ''; # 类别
public function __construct() {} # 构造函数
# 类型获取
public function getType()
{
echo "这是只鸡~ \n";
}
}
实体猪
<?php
namespace flyweight;
# 实体猪
class Pig implements AnimalInterface
{
private $_type = ''; # 类别
public function __construct(){} 构造函数
# 类型获取
public function getType()
{
echo "这是只猪~ \n";
}
}
农场
<?php
namespace flyweight;
# 农场 - 生产动物
class Farm
{
private $_farmMap = []; # 对象缓存池
# 构造函数
public function __construct()
{
echo "-----------初始化了一个农场----------- \n\n";
}
# 生产方法 * 生产农物 * @param string $type 农场类型
public function produce($type='')
{
// 对象缓存池判断
if (key_exists($type, $this->_farmMap))
{
echo "来自缓存池-> ";
return $this->_farmMap[$type];// 返回缓存
}
switch ($type)
{
case 'chicken':
return $this->_farmMap[$type] = new Chicken();
break;
case 'pig':
return $this->_farmMap[$type] = new Pig();
break;
default:
echo "该农场不支持生产该农物~ \n";
break;
}
}
}
借助最简单的’工厂模式‘来实现享元模式
运行 php test.php
// 注册自加载
spl_autoload_register('autoload');
function autoload($class)
{
require dirname($_SERVER['SCRIPT_FILENAME']).'//..//'.str_replace('\\','/',$class).'.php';
}
/************************************* test *************************************/
use flyweight\Farm;
// 初始化一个工厂
$farm = new Farm();
// 成产一只鸡
$farm->produce('chicken')->getType();
// 再生产一只鸡
$farm->produce('chicken')->getType();
这是只鸡~
来自缓存池-> 这是只鸡~