PHP设计模式:工厂模式(The Factory Pattern)_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > PHP设计模式:工厂模式(The Factory Pattern)

PHP设计模式:工厂模式(The Factory Pattern)

 2012/12/16 17:23:07  web001  程序员俱乐部  我要评论(0)
  • 摘要:在面向对象的编程中,如何产生一个对象呢?即使初学面向对象语言(比如C++、Java、PHP等)的程序员也知道,最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。当我们使用new操作符的时候,系统默认执行类的构造函数,然后为我们生产一个对象。那么,有没有不使用new操作符就可以创建对象的方式呢?或者说,我们在某些情况下,是不是需要寻找另外一种创建对象的方式呢?那我们先看看如果直接用new操作符来创建对象会带来一些什么样的问题
  • 标签:PHP 模式 CTO 设计 设计模式

在面向对象的编程中,如何产生一个对象呢?即使初学面向对象语言(比如C++、Java、PHP等)的程序员也知道, 最通常的方法是一个 new caozuofu.html" target="_blank">操作符产生一个对象实例,new 操作符就是用来构造对象实例的。当我们使用 new 操作符的时候,系统默认执行类的构造函数,然后为我们生产一个对象。

?

那么,有没有不使用 new 操作符就可以创建对象的方式呢?或者说,我们在某些情况下,是不是需要寻找另外一种创建对象的方式呢?

?

那我们先看看如果直接用 new 操作符来创建对象会带来一些什么样的问题:

?

  1. 我们想要在创建对象的同时进行不同的初始化操作;?
  2. 我们需要生成这个对象的不同的子对象;?
  3. 在创建这个对象之前,我们需要创建所有它的依赖对象。?

如何解决这些问题呢?复制/粘贴?肯定有更高效的,就是用我们今天将要介绍的工厂模式,下面是维基百科给出的一个解释:工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”

?

说的通俗一点就是,不需要我们使用的时候去新建(new)一个对象了,而且可以根据需求,当我们需要对象的时候,用工厂来生产一个或者N个,嘻嘻,还可以量产的,如果遇到买5赠1的话,…,有点跑题了,下面写段代码来直观感受一下工厂模式。

?

未使用工厂模式的数据库代码:

?

$db = new MySql($user, $password, $database);?

?

使用工厂模式的数据库代码:

?

$db = DBFactory::create_connection();

?

前者代码使用的是传统方法,用 new 操作符生成一个新的对象,后者使用了工厂方法,用一个工厂来生产对象。从代码上来看,两者没有什么本质的区别,但是在实现上,工厂方法可以根据不同的需求生产出不同的对象。在第一种方法上,我们的 $db 只能是 MySql 类型,但是在工厂方法中,我们的 $db 可以是任何的实现了 Database 类的子类,可以是 MySql、MsSqlServer等。

?

工厂方法体现了一个面向对象的思想——封装。设计模式的理念不是封装数据和方法,而是封装变化。当我们需要创建的对象不是 MySql 时,我们只需要修改工厂的?create_connection() 方法,保留工厂方法的接口不变。

?

原文链接:http://tjwzjs.cn/news/knowledge/2012/1212/60.html

发表评论
用户名: 匿名