php享元模式

来源:互联网 发布:c 程序员用mac好吗 编辑:程序博客网 时间:2024/06/05 09:57
CleverCode最近在看享元模式。

1 模式介绍

 运用共享技术有效的支持大量细粒度的对象


2 模式中的角色

  (1) 抽象享元角色:为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式通过此方法传入。在Java中可以由抽象类、接口来担当。
  (2) 具体享元角色:实现抽象角色规定的方法。如果存在内蕴状态,就负责为内蕴状态提供存储空间。
  (3) 享元工厂角色:负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关键!
  (4) 客户端角色:维护对所有享元对象的引用,而且还需要存储对应的外蕴状态。
   

3 模式结构



4 项目

4.1 需求

   设计一个网站可以共享,但是用户可以不同的场景。


4.2 源码

<?php/*** php享元模式* copyright (c) http://blog.csdn.net/CleverCode **///外部变化class User{/*{{{*/    public $name;    public function __construct($name)    {        $this->name = $name;    }    public function getName()    {        return $this->name;    }}/*}}}*/abstract class WebSite{/*{{{*/    abstract function myUse(User $user);}/*}}}*///具体的网站class ConWebSite extends WebSite{/*{{{*/   private $name;   public function __construct($name)    {        $this->name = $name;    }    public function getName()    {        return $this->name;    }    function myUse(User $user)    {        echo "网站:".$this->name." 用户:".$user->getName()."\r\n";     }}/*}}}*///工厂class WebSiteFactory{/*{{{*/    private $hash = array();    public function getWebSite($key)    {        if(false == isset($this->hash[$key]))        {           $this->hash[$key] = new ConWebSite($key);         }        return $this->hash[$key];    }}/*}}}*/class Client{/*{{{*/    public static function main($argv)    {        $webSiteFactory = new WebSiteFactory();        $boke = $webSiteFactory->getWebSite('博客');        $boke->myUse(new User('张三'));        $weiBo = $webSiteFactory->getWebSite('微博');        $weiBo->myUse(new User('王五'));        $boke2 = $webSiteFactory->getWebSite('博客');        $boke2->myUse(new User('李四'));    }}/*}}}*/Client::main($argv);?>


4.3 结果展示



1 0
原创粉丝点击