用户操作
[即时聊天] [发私信] [加为好友]
allinID:leeshaoqun
143256次访问,排名559好友0人,关注者2
leeshaoqun的文章
原创 92 篇
翻译 1 篇
转载 136 篇
评论 36 篇
allin的公告
Allin的博客
老照片
最近评论
qqq:www
mldstk:wow gold,
mldstk:wow gold,
alex.xu:漂亮 ,说实话 比官方文档写的好
lkuzhi:是啊,能不能找个能用的过来啊
文章分类
收藏
    相册
    ♡韩国可爱的小童星 ♡
    korea
    韩佳人
    金泰熙
    宋惠乔
    宋慧乔车太贤《我和我的女友》
    微笑美女——韩孝珠
    Hibernate
    Hibernate中文网
    Hibernate官方网站
    php
    Haohappy的专栏--PHP5研究中心
    Spring
    Raible's Wiki -- AppFuse
    Spring 开发参考手册
    SpringFramework中文论坛
    SpringFramework官方站点
    个人博客
    greengnn's space
    开源
    java开源大全(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 设计模式PHP5实现之----工厂(Factory)收藏

    新一篇: 高级 DAO 编程 | 旧一篇: 对代理模式与Java动态代理类的理解

    <?php
    /**
    * 工厂模式
    *
    * 工厂模式有很多种变形,这里只简单举个例子
    *
    * @author doodoo<pwtitle@gmai.com>
    */


    /**
    * 工厂接口
    */
    interface Factory{
     public static function getInstance();

     /**
     * 注册类
     *
     * @param int $id 标志ID
     * @param string $creator_func 构造方法,相当于工厂的加工方式
     */
     public function registerClass($id, $creator_func);
     

     /**
     * 实例化具体类
     *
     * @param int $id  标志id
     * @param  array $args 传递给构造函数的参数
     */
     public function createObject($id, $args);
    }


    /**
    * 具体工厂,对接口的实现
    */
    class MyFactory implements Factory {
     
     private $registedClasses = array();
     static public $instance = null;
     private function __construct(){}

     /**
     * 单态生成类的实例,保证内存中只有一个工厂
     */
     public static function getInstance(){
      if(self::$instance==null){
       self::$instance = new MyFactory();
      }
      return self::$instance;
     }
     

     public function registerClass($id, $creator_func){
      $this->registedClasses[$id] = $creator_func;
     }
     

     public function createObject($id, $args){
      if(!isset($this->registedClasses[$id])){
       return null;
      }
      return $this->registedClasses[$id]($args);
     }
     
    }


    /**
    * 需要实例化的类,相当于要让工厂加工的产品
    */
    class MyClass{
     private $created;
     private $args;
     public function __construct($args){
      $this->args = $args;
      $this->created = time();
     }
     public function getCreated(){
      return $this->created;
     }
    }

    /**
    * 类实例化的具体方法
    * 相当于告诉工厂使用什么加工方式
    * 这样的加工方式就可以生成MyClass的实例了(产品)
    */
    function MyClassCreator($args){
     return new MyClass($args);
    }

    $factory = MyFactory::getInstance();

    $factory->registerClass(1234,"MyClassCreator");
    $instance = $factory->createObject(1234,array());

    print_r($instance);
    ?>

     

    发表于 @ 2007年10月19日 22:06:00|评论(loading...)|编辑

    新一篇: 高级 DAO 编程 | 旧一篇: 对代理模式与Java动态代理类的理解

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © allin