【一天一个设计模式】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();
?>
看来这东东是急不得的,所以准备一天研究那么一个。。。
顺便在这里做做笔记。。。
(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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28