介绍
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能,属于结构型模式。
代码实例
现有编辑器接口,通过 phpstorm 和 notepad 类实现了写的功能,通过工厂类选择创建编辑器类,工厂里有数组可以存储已经实例化过的类,在外部调用时,如果数组中存在已经实例化的类就直接调用,不需要在创建了。享元模式分内部和外部,在该例子中,内部就是编辑器类的方法,外部是使用人,内部保持不变,外部保持变化,根据调用的使用人,去工厂创建的池中寻找已创建的类。
<?php
interface AdvancedIde
{
public function write();
}
class Phpstorm implements AdvancedIde
{
public $name;
public function __construct($name)
{
$this->name = $name;
}
public function readJs()
{
echo $this->name . '用phpstorm 读js代码' . '<br>';
}
public function readPhp()
{
echo $this->name . '用phpstorm 读php代码' . '<br>';
}
public function write()
{
echo $this->name . '用phpstorm 写代码' . '<br>';
}
}
class IdeFactory
{
public $map = [];
public function handle($name)
{
if(!in_array($name,$this->map)){
$this->map[$name] = new Phpstorm($name);
return $this->map[$name];
}
return $this->map[$name];
}
}
class FlyweightPatternDemo
{
public function output()
{
$userList = ['张三','李四','王五'];
$ideFactory = new IdeFactory();
foreach($userList as $key => $item){
$ide = $ideFactory->handle($item);
$ide->readPhp();
$ide->readJs();
$ide->write();
}
}
}
$demo = new FlyweightPatternDemo();
$demo->output();
总结
享元模式对于系统中存在大量相似对象的创建管理很有用,可以支持对象更细粒度的管理,该模式必须通过工厂模式类来控制。
网友评论