php mail factory,[转]PHP 中实现 Factory 模式

本文详细探讨了工厂模式的灵活性,通过实例和代码展示如何根据需求动态创建不同类型的对象。从数据库连接到用户权限管理,再到网站角色实例化,工厂模式提供了强大的灵活性。核心概念包括静态工厂方法和注册-创建机制,有助于代码组织和复用。
摘要由CSDN通过智能技术生成

* factory 模式

*

* factory 的概念不像 Singleton 等模式那样, factory 模式比较

* 灵活。通常根据不同的要求能够"生产不同对象"(实例化类)就可以

* 归为 factory 模式或者其变体。

*//**

* 先用手册中一个简单的例子说明 factory 模式

*

* 注意下面这段代码并不可执行,因为需要定义相应的数据库[Driver]类。

*/classDbFactory{// factory 方法publicstaticfunctionfactory($type){// 注意这里的包含文件应该是相关数据库的[Driver]类if(include_once‘Drivers/‘.$type.‘.php‘){$classname=‘Driver_‘.$type;returnnew$classname;}else{thrownewException(‘Driver not found‘);}}}// 生成数据库(MySQL)连接对象,$DbCon=DbFactory::factory(‘MySQL‘);// $DbCon = DbFactory::factory(‘SQLite’);/**

* "Core PHP Programming" 中的例子

*/classFactory{private$registeredClasses=array();staticprivate$instance=NULL;privatefunction__construct(){}staticfunctiongetInstance(){if(self::$instance==NULL){self::$instance=newFactory();}returnself::$instance;}functionregisterClass($id,$creator_func){$this->registeredClasses[$id]=$creator_func;}functioncreateObject($id,$args){if(!isset($this->registeredClasses[$id])){return(NULL);}return($this->registeredClasses[$id]($args));}}classMyClass{private$created;publicfunction__construct(){$created=time();}publicfunctiongetCreated(){return($this->created);}}functionMyClassCreator(){return(newMyClass());}$factory=Factory::getInstance();$factory->registerClass(1234,"MyClassCreator");$instance=$factory->createObject(1234,array());/**

* "PHP 5 Power Programming" 中的对 factory 模式的诠释

*

* 一个 Factory 类通常都有一个方法负责接受参数,根据参数的不同来决定

* "生产"哪个类的实例。下面拿网站的用户作为例子,作为实际运用:把网站

* 用户分成匿名用户,普通(注册)用户,管理员。我们在类中进行用户的权限

* 控制—这样能够更好的展现 factory 类在整个类体系中所扮演的角色。

*//**

* 基类 User

*/abstractclassUser{public$name=null;publicfunction__construct($name){$this->name=$name;}functiongetName(){return$this->name;}// 权限控制方法functionhasReadPermission(){returntrue;}functionhasModifyPermission(){returnfalse;}functionhasDeletePermission(){returnfalse;}}// 匿名用户类classGuestUserextendsUser{}// 注册用户类classCustomerUserextendsUser{functionhasModifyPermission(){returntrue;}}// 管理员类classAdminUserextendsUser{functionhasModifyPermission(){returntrue;}functionhasDeletePermission(){returntrue;}}/**

* 用户 factory 类

*/classUserFactory{privatestatic$users=array("Andi"=>"admin","Hick"=>"guest","Derick"=>"customer");staticfunctionCreate($name){if(!isset(self::$users[$name])){// 如果不存在对应的用户类,则提示错误}switch(self::$users[$name]){case"guest":returnnewGuestUser($name);case"customer":returnnewCustomerUser($name);case"admin":returnnewAdminUser($name);default:// 默认应该报错}}}// 使用 factory 类实例化用户$HickUser=UserFactory::Create(‘Hick‘);echo$HickUser->name;?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值