介绍
运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。
何时使用:系统中存在大量消耗大量内存的对象,并且这些对象可以按照某种特性简单的进行分组的。
优点:
减少对象的创建数量,降低内存消耗。
缺点:
提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。
代码实现:
<?php
interface Flyweight{
function show();
}
class ConcreteFlyweight implements Flyweight{
private $state;
function __construct($state){
echo 1;
echo '<br>';
$this->state = $state;
}
function show(){
return $this->state;
}
}
class UnsharedConcreteFlyweight implements Flyweight{
private $state;
function __construct($state){
$this->state = $state;
echo 2;
echo '<br>';
}
function show(){
return $this->state;
}
}
class FlyweightFactory{
private $flyweights = array();
function getFlyweight($state){
if(!isset($this->flyweights[$state])){
$this->flyweights[$state]=new ConcreteFlyweight($state);
}
return $this->flyweights[$state];
}
}
$flyweightFactory = new FlyweightFactory();
$flyweightOne = $flyweightFactory->getFlyweight("state A");
echo $flyweightOne->show();
echo '<br>';
$flyweightOne = $flyweightFactory->getFlyweight("state A");
echo $flyweightOne->show();
echo '<br>';
$flyweightTwo = new UnsharedConcreteFlyweight("state B");
echo $flyweightTwo->show();
echo '<br>';
$flyweightTwo = new UnsharedConcreteFlyweight("state B");
echo $flyweightTwo->show();
echo '<br>';