相关角色:
1、抽象享元角色:
2、具体享元角色:
3、非享元角色:
4、享元工厂角色:
<?php
interface Flyweight
{
public function show();
}
class ConcreteFlyweight implements Flyweight
{
private $state;
function __construct($state)
{
$this->state = $state;
}
function show()
{
return $this->state;
}
}
class UnsharedConcreteFlyweight implements Flyweight
{
private $state;
function __construct($state)
{
$this->state = $state;
}
public function show()
{
return $this->state;
}
}
class FlyweightFactory
{
private $flyweights = [];
function getFlyweight($state)
{
if(!isset($this->flyweights[$state])) {
echo "create ". $state.PHP_EOL;
$this->flyweights[$state] = new ConcreteFlyweight($state);
$flyweight = $this->flyweights[$state];
} else {
$flyweight = $this->flyweights[$state];
echo "get ".$state." from pool".PHP_EOL;
}
return $flyweight;
}
}
$flyweightFactory = new FlyweightFactory();
$flyweightOne = $flyweightFactory->getFlyweight("state A");
echo $flyweightOne->show();
$flyweightOne = $flyweightFactory->getFlyweight("state A");
echo $flyweightOne->show();
$flyweightTwo = new UnsharedConcreteFlyweight("state B");
echo $flyweightTwo->show();
?>
五子棋游戏,棋子只有黑白两色,可共享,但是具体的落子位置不一样,不共享。