享元模式 Flyweight Pattern

享元模式的定义为:采用一个共享来避免大量拥有相同内容对象的开销。

这种开销中最常见。直观的就是内存的损耗。享元模式以共享的方式高效地支持大量的细粒度对象。

在名字和定义中都体现了共享这个核心概念,那么怎么来实现共享呢?要知道每个事物都是不同的,但同时又有一定的共性,如果只有完全相同的事物才能共享,那么享元模式可以说就是不可行的,因此我们应该尽量将事物的共性共享,而又保留它的个性。

为了做到这点,享元模式中区分了内蕴状态和外蕴状态。内蕴状态就是共性,外蕴状态就是个性。

内蕴对象存储在享元的内部,不会随环境的改变而改变,是可以共享的;

外蕴对象是不可共享的,它随着环境的改变而改变,因此外蕴状态是由客户端来保持(因为环境的变化是由客户端引起的)。在每个具体的环境下,客户端将外蕴状态传递给享元,从而创建出不同的对象来。

/**
*FlyWeight Pattern 享元模式
*/

/**
*抽象享元角色
*/
abstract class Flyweight
{
	/**
	*示意性方法
	*@param string $state 外部状态
	*/
	abstract public function operation($state);
}
/**
*具体享元角色
*/
class ConcreteFlyweight extends Flyweight
{
	private $_intrinsicState = null;
	/**
	*构造方法
	*@param string $state 内部状态
	*/
	public function __construct($state)
	{
		$this->intrinscState = $state;
	}
	public function operation($state)
	{
		echo 'ConcreteFlyweight operation,Intrinsic State = '.$this->intrinscState . 'Extrinsic State = ' . $state . '<br/>';
	}
}
/**
*不共享的具体享元,客户端直接调用
*/
class UnsharedConcreteFlyweight extends Flyweight
{
	private $_intrinsicState = null;
	/**
	*构造方法
	*@param string $state 内部状态
	*/
	public function __construct($state)
	{
		$this->_intrinsicState = $state;
	}
	public function operation($state)
	{
		echo 'UnsharedConcreteFlyweight operation, Intrinsic State = '.$this->_intrinsicState.' Extrinsic State='. $state. '<br/>';
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值