初识PHP设计模式--享元模式
2018-01-26 11:55
766 查看
享元模式(Flyweight)属于结构型模式之一,定义:运用共享技术有效地支持大量细粒度对象的复用。
看定义理解起来也不算难,就是将系统中需要重复创建的对象,共享在一个享元池里面,
当第二次创建的时候,直接调用享元池里面已经存好的对象就可以了。
主要用于大量需要重复创建的对象。
整体代码的结构有点像是简单工厂扩展演变而来的,在简单工厂的基础上,把重复创建的对象共享在享元池。
代码如下:
<?php
/** 抽象兵工厂类
* abstract Arsenal
*/
abstract Class Arsenal{
abstract function Create();
}
/** 具体战士类
* Warrior
*/
Class Warrior extends Arsenal
{
function Create()
{
echo "战士:保家卫国!冲啊<br/>";
}
}
/** 具体骑士类
* Knight
*/
Class Knight extends Arsenal
{
function Create()
{
echo "骑士:冲散敌军阵形<br/>";
}
}
/** 享元类
* Flyweight
*/
Class Flyweight{
// 定义享元池
private $flyweights = array();
function getObjClass($name){
if(isset($this->flyweights[$name]))
{
echo "*************从享元池里取出************<br/>";
return $this->flyweights[$name];
}
else{
echo "*************新建对象并存入享元池************<br/>";
$ClassName = new $name();
$this->flyweights[$name] = $ClassName;
return $this->flyweights[$name];
}
}
}
输出结果:
*************新建对象并存入享元池************
战士:保家卫国!冲啊
*************从享元池里取出************
战士:保家卫国!冲啊
*************从享元池里取出************
战士:保家卫国!冲啊
*************新建对象并存入享元池************
骑士:冲散敌军阵形
*************从享元池里取出************
骑士:冲散敌军阵形
看定义理解起来也不算难,就是将系统中需要重复创建的对象,共享在一个享元池里面,
当第二次创建的时候,直接调用享元池里面已经存好的对象就可以了。
主要用于大量需要重复创建的对象。
整体代码的结构有点像是简单工厂扩展演变而来的,在简单工厂的基础上,把重复创建的对象共享在享元池。
场景:
我们在玩一些战争类游戏的时候,我们经常会在兵工厂里面重复去购买各种兵种的士兵,每个士兵都是对象的话,我们就会需要重复创建很多对象,享元模式很好的帮我们解决了这个问题。代码如下:
<?php
/** 抽象兵工厂类
* abstract Arsenal
*/
abstract Class Arsenal{
abstract function Create();
}
/** 具体战士类
* Warrior
*/
Class Warrior extends Arsenal
{
function Create()
{
echo "战士:保家卫国!冲啊<br/>";
}
}
/** 具体骑士类
* Knight
*/
Class Knight extends Arsenal
{
function Create()
{
echo "骑士:冲散敌军阵形<br/>";
}
}
/** 享元类
* Flyweight
*/
Class Flyweight{
// 定义享元池
private $flyweights = array();
function getObjClass($name){
if(isset($this->flyweights[$name]))
{
echo "*************从享元池里取出************<br/>";
return $this->flyweights[$name];
}
else{
echo "*************新建对象并存入享元池************<br/>";
$ClassName = new $name();
$this->flyweights[$name] = $ClassName;
return $this->flyweights[$name];
}
}
}
<?php header("Content-Type:text/html;charset=utf-8"); require_once "Flyweight.php"; $obj = new Flyweight(); // 第1个战士 $War1 = $obj->getObjClass("Warrior"); $War1->Create(); // 第2个战士 $War2 = $obj->getObjClass("Warrior"); $War2->Create(); // 第3个战士 $War3 = $obj->getObjClass("Warrior"); $War3->Create(); // 第1个骑兵 $kni1 = $obj->getObjClass("Knight"); $kni1->Create(); // 第2个骑兵 $kni2 = $obj->getObjClass("Knight"); $kni2->Create();
输出结果:
*************新建对象并存入享元池************
战士:保家卫国!冲啊
*************从享元池里取出************
战士:保家卫国!冲啊
*************从享元池里取出************
战士:保家卫国!冲啊
*************新建对象并存入享元池************
骑士:冲散敌军阵形
*************从享元池里取出************
骑士:冲散敌军阵形
相关文章推荐
- 初识PHP设计模式--模板方法模式
- 初识PHP设计模式--建造者模式
- php设计模式 FlyWeight (享元模式)
- 初识PHP设计模式--观察者模式
- PHP设计模式-享元模式
- 初识PHP设计模式--解释器模式
- 初识PHP设计模式--备忘录模式
- 初识PHP设计模式--组合模式
- 初识PHP设计模式--适配器模式
- [php]php设计模式 FlyWeight (享元模式)
- 初识PHP设计模式--桥接模式
- 初识PHP设计模式--装饰模式
- PHP设计模式-享元模式
- 初识PHP设计模式--原型模式
- 学习php设计模式 php实现享元模式(flyweight)
- php设计模式 FlyWeight (享元模式)
- 初识PHP设计模式--状态模式
- 初识PHP设计模式--代理模式
- 初识PHP设计模式--职责链模式
- PHP设计模式:结构型之享元模式(Flyweight)