PHP享元(轻量级)模式

Posted wgchen~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP享元(轻量级)模式相关的知识,希望对你有一定的参考价值。

项目应用目录

  • 结构型模式 - 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();
这是只鸡~
来自缓存池-> 这是只鸡~

以上是关于PHP享元(轻量级)模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之享元模式(结构型)

设计模式:享元(FlyWeight)模式

设计模式之享元模式(结构型)

设计模式之享元模式(结构型)

[工作中的设计模式]享元模式模式FlyWeight

享元模式---Flyweight