簡介: 享元模式,屬於結構型的設計模式。運用共用技術有效地支持大量細粒度的對象。 適用場景: 具有相同抽象但是細節不同的場景中。 優點: 把公共的部分分離為抽象,細節依賴於抽象,符合依賴倒轉原則。 缺點: 增加複雜性。 代碼: //用戶類 class User { private $name; fu ...
簡介:
享元模式,屬於結構型的設計模式。運用共用技術有效地支持大量細粒度的對象。
適用場景:
具有相同抽象但是細節不同的場景中。
優點:
把公共的部分分離為抽象,細節依賴於抽象,符合依賴倒轉原則。
缺點:
增加複雜性。
代碼:
//用戶類
class User
{
private $name;
function __construct($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
//定義一個抽象的創建網站的抽象類
abstract class WebSite
{
abstract public function use(User $user);
}
// 具體網站類
class ConcreteWebSite extends WebSite
{
private $name = '';
function __construct($name)
{
$this->name = $name;
}
public function use(User $user)
{
echo "{$user->getName()}使用我們開發的{$this->name}" . PHP_EOL;
}
}
//網站工廠
class WebSiteFactory
{
private $flyweights = [];
public function getWebSiteGategory($key)
{
if (empty($this->flyweights[$key])) {
$this->flyweights[$key] = new ConcreteWebSite($key);
}
return $this->flyweights[$key];
}
}
$f = new WebSiteFactory();
$fx = $f->getWebSiteGategory('電商網站 ');
$fx->use(new User('客戶A'));
$fy = $f->getWebSiteGategory('電商網站 ');
$fy->use(new User('客戶B'));
$fl = $f->getWebSiteGategory('資訊網站 ');
$fl->use(new User('客戶C'));
$fm = $f->getWebSiteGategory('資訊網站 ');
$fm->use(new User('客戶D'));