正文

PHP结构型模式之享元模式详解(js享元模式)新鲜出炉

文章摘要

这篇文章介绍了**享元模式(Flyweight Pattern)**及其实现。文章首先定义了一个**享元接口**`Flyweight`,该接口包含一个操作方法`operation()`。接着,实现了一个`ConcreteFlyweight`类,该类继承自`Flyweight`接口,并使用一个私有属性`$state`来保持对象状态。`ConcreteFlyweight`类的`operation()`方法在实例化时会输出操作信息。 此外,文章还定义了一个**享元工厂类**`FlyweightFactory`。该类负责管理共享实例,通过一个内部数组`$flyweights`来存储不同状态的实例。当调用`getFlyweight()`方法时,如果对应状态的实例已经存在,则返回该实例;否则,创建新实例并存储在数组中。 文章最后展示了如何在客户端代码中使用`FlyweightFactory`。通过工厂类获取不同状态的实例,并调用这些实例的操作方法,实现了对象的共享使用,减少了对象的重复创建。

<?php // 享元接口 interface Flyweight { public function operation(); } // 具体享元类 class ConcreteFlyweight implements Flyweight { private $state; public function __construct($state) { $this->state=$state; } public function operation() { echo “ConcreteFlyweight with state {$this->state} is operated.\n”; } } // 享元工厂类 class FlyweightFactory { private $flyweights=[]; public function getFlyweight($state) { if (!isset($this->flyweights[$state])) { $this->flyweights[$state]=new ConcreteFlyweight($state); } return $this->flyweights[$state]; } } // 客户端代码 $factory=new FlyweightFactory(); $flyweight1=$factory->getFlyweight(“state1”); $flyweight1->operation(); $flyweight2=$factory->getFlyweight(“state2”); $flyweight2->operation(); $flyweight3=$factory->getFlyweight(“state1”); $flyweight3->operation();