PHP设计模式
结构型模式(12)享元模式
>享元模式:运用共享技术有效地支持大量细粒度的对象。 享元模式变化的是对象的存储开销 #### 享元模式中主要角色: - 抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外运状态的操作可以通过调用商业以参数形式传入 - 具体享元(ConcreteFlyweight)角色:实现Flyweight接口,并为内部状态(如果有的话)拉回存储空间。ConcreteFlyweight对象必须是可共享的。它所存储的状态必须是内部的 - 不共享的具体享元(UnsharedConcreteFlyweight)角色:并非所有的Flyweight子类都需要被共享。Flyweigth使共享成为可能,但它并不强制共享 - 享元工厂(FlyweightFactory)角色:负责创建和管理享元角色。本角色必须保证享元对象可能被系统适当地共享 - 客户端(Client)角色:本角色需要维护一个对所有享元对象的引用。本角色需要自行存储所有享元对象的外部状态 #### 享元模式的优点: - Flyweight模式可以大幅度地降低内存中对象的数量 #### 享元模式的缺点: - Flyweight模式使得系统更加复杂 - Flyweight模式将享元对象的状态外部化,而读取外部状态使得运行时间稍微变长 #### 享元模式适用场景: - 1 一个应用程序使用了大量的对象 - 2 完全由于使用大量的对象,造成很大的存储开销 - 3 对象的大多数状态都可变为外部状态 - 4 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象 - 5 应用程序不依赖于对象标识 ```php <?php abstract class Resources{ public $resource=null; abstract public function operate(); } class unShareFlyWeight extends Resources{ public function __construct($resource_str) { $this->resource = $resource_str; } public function operate(){ echo $this->resource."<br>"; } } class shareFlyWeight extends Resources{ private $resources = array(); public function get_resource($resource_str){ if(isset($this->resources[$resource_str])) { return $this->resources[$resource_str]; }else { return $this->resources[$resource_str] = $resource_str; } } public function operate(){ foreach ($this->resources as $key => $resources) { echo $key.":".$resources."<br>"; } } } // client $flyweight = new shareFlyWeight(); $flyweight->get_resource('a'); $flyweight->operate(); $flyweight->get_resource('b'); $flyweight->operate(); $flyweight->get_resource('c'); $flyweight->operate(); // 不共享的对象,单独调用 $uflyweight = new unShareFlyWeight('A'); $uflyweight->operate(); $uflyweight = new unShareFlyWeight('B'); $uflyweight->operate(); /* 输出: a:a a:a b:b a:a b:b c:c A B */ ```
顶部
收展
底部
[TOC]
目录
PHP设计模式概述
设计模式之开闭原则
设计模式之里氏代换原则
设计模式之接口隔离原则
创建型模式(1)单例模式
创建型模式(2)工厂模式
创建型模式(3)抽象工厂模式
创建型模式(4)原型模式
创建型模式(5)建造者模式
结构型模式(6)委托代理模式
结构型模式(7)装饰模式
结构型模式(8)外观模式
结构型模式(9)组合模式
结构型模式(10)适配器模式
结构型模式(11)桥接模式
结构型模式(12)享元模式
行为型模式(13)策略模式
行为型模式(14)解释器模式
行为型模式(15)观察者模式
行为型模式(16)模板方法模式
行为型模式(17)迭代器模式
行为型模式(18)命令模式
行为型模式(19)备忘录模式
行为型模式(20)状态模式
行为型模式(21)访问者模式
行为型模式(22)中介者模式
行为型模式(23)责任链模式
相关推荐
PHP基础
PHP函数
PHP算法
PHP版本