美文网首页PHP经验分享PHP开发
编程的设计模式之享元模式

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

作者: phpworkerman | 来源:发表于2020-08-31 22:08 被阅读0次
    介绍

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

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

    相关文章

      网友评论

        本文标题:编程的设计模式之享元模式

        本文链接:https://www.haomeiwen.com/subject/pygfsktx.html