PHP设计模式-工厂模式

来源:互联网 发布:淘宝申请定向计划 编辑:程序博客网 时间:2024/06/06 00:58

PHP设计模式-工厂模式


可能一直都以为设计模式只是为Java架构师准备的,实际上,设计模式对于每个人都非常有用。为什么说它们在PHP应用程序中也非常有用?

接下来让我来解释这些问题。

设计模式不仅代表着更快开发健壮软件的有用方法,而且还提供了以友好的术语封装大型理念的方法。用较小的示例展示设计模式的价值与功用是非常困难的。这往往有些大材小用的意味,因为模式实际上是在大型代码库中发挥作用的。

既然已经了解了设计模式以及它们的有用之处,现在我们来看看PHP5的几种常用模式。

 

一、工厂模式(Factory Pattern)

 

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。(JAVA中工厂模式分为:简单工厂模式、工厂方法模式、抽象工厂模式)

工厂就是负责生成对象的类或方法。工厂模式解决了当代码关注于抽象类型时如何创建对象实例的问题。

 

在最初的设计模式一书中,许多设计模式都鼓励使用松散耦合。如何理解这个概念?在项目开发中更改一个代码片段时,就会发生问题,而且往往认为完全不相关的部分也可能出现级联破坏。该问题在于紧密耦合。如果类之间有非常强的依赖性,那么这样的系统就很难维护,因为系统里的一个改动会引起一连串的相关改动。所以我们需要一组模式使这些类之间能够相互通信,但不希望它们紧密绑定在一起,以避免出现联锁反应(严格意义上讲是叫解耦)。

 

在大型系统中,许多代码依赖于少数几个关键类。需要更改这些类时,可能会出现困难。例如,假设您有一个从文件读取的User类,您希望将其更改为从数据库读取的其他类,但是,所有的代码都引用从文件读取的原始类,这时候,使用工厂模式会很方便。

 

举例说明:

复制代码
<?php   abstract class IUser { //抽象产品角色       abstract function getName();   }   class User extends IUser { //具体产品角色       public function getName() {           return 'Jack';         }   }   class UserFactory { //工厂类角色       static public function create() {           return new User(); //返回实例       }   }   $uo = UserFactory::create();   echo $uo->getName();?>
复制代码

在简单工厂模式中,一个工厂类处于对产品实例化调用的中心位置上,它决定哪一个产品类应当被实例化,如同一个交通警察站在来往的车辆流中,决定放行哪一个方向的车辆前行。

工厂模式的三种角色:

1.工厂角色(Creator):这是本模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

2.抽象产品角色(Product):工厂模式所创建的所有对象的父类。它负责描述所有实例所共有的公共接口。(一般由接口或抽象类来实现)。

3.具体产品角色(Concrete Product):是工厂模式创建的目标,所有创建的对象都是充当这个角色的某个具体类的实例。(由一个具体类实现)

工厂模式的优缺点:

优点:

1. 简单实用

2. 利于软件体系结构优化

缺点:

1. 违反高内聚责任分配原则

2. 模块功能容易蔓延,不利于系统维护

 

有时此类模式在规模较小的环境中似乎有点大材小用,不过,最好还是学习这种扎实的编码形式,以便应用于任意规模的项目中。

原创粉丝点击