翼度科技»论坛 编程开发 PHP 查看内容

浅谈PHP设计模式的享元模式

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
简介:

享元模式,属于结构型的设计模式。运用共享技术有效地支持大量细粒度的对象。
适用场景:

具有相同抽象但是细节不同的场景中。
优点:

把公共的部分分离为抽象,细节依赖于抽象,符合依赖倒转原则。
缺点:

增加复杂性。
代码:
  1. //用户类
  2. class User
  3. {
  4.     private $name;
  5.     function __construct($name)
  6.     {
  7.         $this->name = $name;
  8.     }
  9.     public function getName()
  10.     {
  11.         return $this->name;
  12.     }
  13. }
  14. //定义一个抽象的创建网站的抽象类
  15. abstract class WebSite
  16. {
  17.     abstract public function use(User $user);
  18. }
  19. // 具体网站类
  20. class ConcreteWebSite extends WebSite
  21. {
  22.     private $name = '';
  23.     function __construct($name)
  24.     {
  25.         $this->name = $name;
  26.     }
  27.     public function use(User $user)
  28.     {
  29.         echo "{$user->getName()}使用我们开发的{$this->name}" . PHP_EOL;
  30.     }
  31. }
  32. //网站工厂
  33. class WebSiteFactory
  34. {
  35.     private $flyweights = [];
  36.     public function getWebSiteGategory($key)
  37.     {
  38.         if (empty($this->flyweights[$key])) {
  39.             $this->flyweights[$key] = new ConcreteWebSite($key);
  40.         }
  41.         return $this->flyweights[$key];
  42.     }
  43. }
  44. $f = new WebSiteFactory();
  45. $fx = $f->getWebSiteGategory('电商网站 ');
  46. $fx->use(new User('客户A'));
  47. $fy = $f->getWebSiteGategory('电商网站 ');
  48. $fy->use(new User('客户B'));
  49. $fl = $f->getWebSiteGategory('资讯网站 ');
  50. $fl->use(new User('客户C'));
  51. $fm = $f->getWebSiteGategory('资讯网站 ');
  52. $fm->use(new User('客户D'));
复制代码
来源:https://www.cnblogs.com/phpphp/p/17067999.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具