+ -
当前位置:首页 → 问答吧 → 【一天一个设计模式】01 - 工厂模式

【一天一个设计模式】01 - 工厂模式

时间:2008-11-05

来源:互联网

最近看《设计模式》看得有些头痛。。。

看来这东东是急不得的,所以准备一天研究那么一个。。。

顺便在这里做做笔记。。。

(PS:例子来源于网络,而且我刚开始研究,所以心得会比较少,大多是些例子吧。。。)

1、先看一个简单的例子


<?php
interface IUser
{
  function getName();
}
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()
  {
    return "Jack";
  }
}
$uo = User::Load( 1 );
echo( $uo->getName()."\n" );
?>



2、一个稍微复杂但却相当经典的例子


<?php
//BT种子的接口
interface BT
{
    public function process();
}
//BT种子的下载处理类
class BTdown implements BT
{
    public function process()
    {
        //输出BT种子
        echo '输出BT种子';
    }
}
//BT种子的上传处理类
class BtUpload implements BT
{
    public function process()
    {
        //保存上传的BT种子
        echo '保存上传的BT种子';
    }
}
---------------------------------------------------------------
//生产BT种子处理对象的设备的接口
interface BTcreator
{
    public function createBTObject();
}
//生产BT种子下载处理对象的设备
class BTdownCreator implements BTcreator
{
    public function createBTObject()
    {
        /**
        * 如果不是管理员,送10点积分
        */
        //然后返回BT种子下载处理对象
        return new BTdown();
    }
}
//生产BT种子上传处理对象的设备
class BTUploadCreator implements BTcreator
{
    public function createBTObject()
    {
    /**
    * 如果不是管理员,扣10点积分
    */
    //然后返回BT种子下载处理对象
    return new BtUpload();
    }
}
------------------------------------------------------------------
//生产BT种子处理对象的工厂
class BtFactory
{
    //获取电影处理类的对象,参数为类名
    public function getBtObject($name)
    {
        switch ($name) {
        case 'BTdown':
        $creator = new BTdownCreator();
        break;
        case 'BtUpload':
        $creator = new BtUploadCreator();
        break;
    }
    return $creator->createBTObject();
}
}
---------------------------------------------------------------------
//获取bt工厂
$btFactory = new BtFactory();
//BT种子的下载处理
$what = 'BTdown';
$btObject = $btFactory->getBtObject($what);
$btObject->process();
//BT种子的上传处理
$what = 'BtUpload';
$btObject = $btFactory->getBtObject($what);
$btObject->process();
?>

作者: kakashilw   发布时间: 2008-11-05

占座。。。

作者: kakashilw   发布时间: 2008-11-05

顶 你类

作者: niceup   发布时间: 2008-11-06

作者: 0hudu   发布时间: 2008-11-06

正需要,谢谢啊

作者: koin   发布时间: 2008-11-07