PHP设计模式—-工厂模式(上)

在众多的设计模式中,许多设计模式都鼓励使用松散耦合。这缘于进行大型系统设计开发中的痛苦历程,开发人员在开发中途过程中往往由于修改了一个代码片段,从而引起了系统其他部分所产生的级联破坏。

而该问题就属于程序的紧密耦合,系统中某部分的函数和类严重依赖于系统其他部分函数和累的行为和结构。因此,您需要这样一种模式,使这些类能够相互通信,而又不会出现过度耦合所造成的联锁。

在许多大型系统中,许多代码仅依赖于少数几个关键类。当更改这些类时,往往会引起这样或那样的问题。例如,假设您有一个从文件读取的 User 类。您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类。这时候,使用工厂模式会很方便。

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

  1. 您可能需要计算或取得对象的初始设置;
  2. 您需要选择生成哪个子对象实例;
  3. 在生成你需要的对象之前必须先生成一些辅助功能的对象。

清单 1 显示工厂类的一个示例。它包括两个部分:数据库和一组 PHP 页面,这些页面允许您添加反馈、请求反馈列表并获取与特定反馈相关的文章。

清单1: Factory1.php
<?phpinterface IUser
{
function getName();
}

class User implements IUser
{
public function __construct( $id )
{
……
}

public function getName()
{
return “Jack”;
}
}

class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}

$uo = UserFactory::Create( 1 );
echo( $uo->getName().\n );

?>

在Factory1.php页面中,Iuser接口定义了用户对象应执行什么操作,UserFactory 工厂类则创建 IUser 对象。此关系可以用图 1 中的 UML 表示。

工厂类及其相关 IUser 接口和用户类

图1:工厂类及其相关 IUser 接口和用户类

如果您使用 php 解释器在命令行上运行此代码,将得到如下结果:Jack。此时程序向工厂请求 User 对象,并输出 getName 方法。

相关文章: 

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Comments

还没有评论。

发表评论

(必填)

(必填)