加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

PHP设计模式一(工厂模式)

(2013-03-18 18:07:14)
标签:

php设计模式

it

分类: php那些事

工厂模式 


是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接 使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所 有代码会自动更改。

实例一

IUser 接口定义用户对象应执行什么操作。IUser 的实现称为 User,UserFactory 工厂类 则创建 IUser 对象。此关系可以用图 1 中的 UML 表示。



<?php

     interface IUser

       

          function getName($id);

     }

    

     class User implements IUser

     {

          public $id;

          public function __construct($id){}

          public function getName($id)

          {

               if($id == 1)

               {

                    return "sam";

               }else if($id == 2){

                    return "braveryhui";

               }else{

                         return "abc";

               }

          }

     }

    

     class Userfactory

     {

          public static function create($id)

          {

               return new User($id);

          }

     }

    

     $o = Userfactory::create(2);        //这里不用new直接用类名饮用就可以了的原因如下

     echo ($o->getName(2));             //输出"braveryhui"

     当用:: 使用方法是被认为该方法为静态方法, 静态方法中不允许使用$this, 因为静态方法的调用不需要实例化, 而$this是实例化後才出现的, 所以静态方法类似于一个普通的函数

    静态方法  是加栽到内存.而且还少了 NEW 的内存空间.速度相对快一点效率好点。

?>


实例二

变体使用工厂方法。类中的这些公共静态方法构造该类型的对象。如果 创建此类型的对象非常重要,此方法非常有用。例如,假设您需要先创建对象,然后设置许多属 性。此版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始化代码,也不 必将复制好的代码在在代码库中到处粘贴。



<?php

     interface IUser

     {

          function getName($id);

     }

    

     class User implements IUser

     {

          public static function Load($id)

          {

               return new User($id);

          }

          public static function create()

          {

               return new User(null);

          }

          public function __construct($id){}

          public function getName($id)

          {

               if($id == 1)

                    return "return one term !";

               else

                    return "return two term..!!";

          }

     }

     $obj = User::Load(1);    //直接调用加载类方法 用于初始的数据多的时候使用该方法封装

     $obj2 = User::create();

     echo $obj->getName(1);

     echo $obj->getName(2);



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有