PHP经验分享PHP开发

编程的设计模式之享元模式

2020-08-31  本文已影响0人  phpworkerman
介绍

享元模式(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();
总结

享元模式对于系统中存在大量相似对象的创建管理很有用,可以支持对象更细粒度的管理,该模式必须通过工厂模式类来控制。

上一篇下一篇

猜你喜欢

热点阅读