PHP中如何应用享元模式优化设计?

2026-05-22 06:381阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计782个文字,预计阅读时间需要4分钟。

PHP中如何应用享元模式优化设计?

定义:享元模式(Flyweight Pattern)是一种结构型设计模式,通过运用共享技术有效地支持大量细粒度的对象。

结构:享元模式包含以下组件:- Flyweight:享元抽象类,定义所有享元对象共享的接口,声明一个外部状态的方法。- ConcreteFlyweight:具体享元类,实现享元接口,存储内部状态,并实现外部状态方法。- UnsharedConcreteFlyweight:不共享具体享元类,不存储内部状态,存储外部状态。- FlyweightFactory:享元工厂类,用于创建和管理享元对象。

定义:

享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。

结构:
  • Flyweight:享元抽象类,所有具体享元类的接口,通过这个接口,Flyweight 可以接受并作用于外部状态。
  • ConcreteFlyweight:实现 Flyweight 接口的可以共享的具体享元类。
  • UnsharedConcreteFlyweight:非共享的具体享元类。
  • FlyweightFactory:享元工厂,用来创建并管理 Flyweight 对象,它主要是用来确保合理地共享 Flyweight,当用户请求一个 Flyweight 时,FlyweightFactory 对象提供一个已创建的实例或者创建一个(如果不存在的话)。
  • Client:客户端代码。
代码实例:

/** * 抽象类 * Class Flyweight */ abstract class Flyweight { protected $name; public function __construct($name) { $this->name = $name; } abstract public function show($content); } /** * 共享的具体类 * Class ConcreteFlyweight */ class ConcreteFlyweight extends Flyweight { /** * @param $content */ public function show($content) { // TODO: Implement show() method. echo "共享的享元:{$this->name} {$content} <br>"; } } /** * 不共享的具体类 * Class UnsharedConcreteFlyweight */ class UnsharedConcreteFlyweight extends Flyweight { /** * @param $content */ public function show($content) { // TODO: Implement show() method. echo "不共享的享元:{$this->name} {$content} <br>"; } } /** * 享元工厂 * Class FlyweightFactory */ class FlyweightFactory { /** * @var array */ private $flyweights = []; /** * @param $name * @return mixed */ public function getFlyweight($name) { if (!isset($this->flyweights[$name])) { $this->flyweights[$name] = new ConcreteFlyweight($name); } return $this->flyweights[$name]; } } ##客户端代码 // 创建享元工厂 $flyweightFactory = new FlyweightFactory(); // 共享的享元 $flyweight = $flyweightFactory->getFlyweight('state A'); $flyweight->show('other state A'); $flyweight = $flyweightFactory->getFlyweight('state B'); $flyweight->show('other state B'); // 不共享的对象,单独调用 $uflyweight = new UnsharedConcreteFlyweight('state A'); $uflyweight->show('state A'); ##测试结果 共享的享元:state A other state A 共享的享元:state B other state B 不共享的享元:state A state A

PHP中如何应用享元模式优化设计?

总结:
  • 享元模式的目的是为了减少实例化大量的类时对内存的占用。
  • 如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。

本文共计782个文字,预计阅读时间需要4分钟。

PHP中如何应用享元模式优化设计?

定义:享元模式(Flyweight Pattern)是一种结构型设计模式,通过运用共享技术有效地支持大量细粒度的对象。

结构:享元模式包含以下组件:- Flyweight:享元抽象类,定义所有享元对象共享的接口,声明一个外部状态的方法。- ConcreteFlyweight:具体享元类,实现享元接口,存储内部状态,并实现外部状态方法。- UnsharedConcreteFlyweight:不共享具体享元类,不存储内部状态,存储外部状态。- FlyweightFactory:享元工厂类,用于创建和管理享元对象。

定义:

享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。

结构:
  • Flyweight:享元抽象类,所有具体享元类的接口,通过这个接口,Flyweight 可以接受并作用于外部状态。
  • ConcreteFlyweight:实现 Flyweight 接口的可以共享的具体享元类。
  • UnsharedConcreteFlyweight:非共享的具体享元类。
  • FlyweightFactory:享元工厂,用来创建并管理 Flyweight 对象,它主要是用来确保合理地共享 Flyweight,当用户请求一个 Flyweight 时,FlyweightFactory 对象提供一个已创建的实例或者创建一个(如果不存在的话)。
  • Client:客户端代码。
代码实例:

/** * 抽象类 * Class Flyweight */ abstract class Flyweight { protected $name; public function __construct($name) { $this->name = $name; } abstract public function show($content); } /** * 共享的具体类 * Class ConcreteFlyweight */ class ConcreteFlyweight extends Flyweight { /** * @param $content */ public function show($content) { // TODO: Implement show() method. echo "共享的享元:{$this->name} {$content} <br>"; } } /** * 不共享的具体类 * Class UnsharedConcreteFlyweight */ class UnsharedConcreteFlyweight extends Flyweight { /** * @param $content */ public function show($content) { // TODO: Implement show() method. echo "不共享的享元:{$this->name} {$content} <br>"; } } /** * 享元工厂 * Class FlyweightFactory */ class FlyweightFactory { /** * @var array */ private $flyweights = []; /** * @param $name * @return mixed */ public function getFlyweight($name) { if (!isset($this->flyweights[$name])) { $this->flyweights[$name] = new ConcreteFlyweight($name); } return $this->flyweights[$name]; } } ##客户端代码 // 创建享元工厂 $flyweightFactory = new FlyweightFactory(); // 共享的享元 $flyweight = $flyweightFactory->getFlyweight('state A'); $flyweight->show('other state A'); $flyweight = $flyweightFactory->getFlyweight('state B'); $flyweight->show('other state B'); // 不共享的对象,单独调用 $uflyweight = new UnsharedConcreteFlyweight('state A'); $uflyweight->show('state A'); ##测试结果 共享的享元:state A other state A 共享的享元:state B other state B 不共享的享元:state A state A

PHP中如何应用享元模式优化设计?

总结:
  • 享元模式的目的是为了减少实例化大量的类时对内存的占用。
  • 如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。