`
web001
  • 浏览: 98783 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

    博客分类:
  • PHP
阅读更多

在面向对象的编程中,如何产生一个对象呢?即使初学面向对象语言(比如C++、Java、PHP等)的程序员也知道, 最通常的方法是一个 new 操作符产生一个对象实例,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

2
0
分享到:
评论

相关推荐

    php设计模式全解.rar

    这份压缩包包含了一个名为“guide_to_php_design_pattern_zh”的指南,很可能是一个详细的中文版PHP设计模式教程。 在PHP编程中,设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。这些模式不仅适用于...

    PHP 简单工厂模式例子

    简单工厂模式(Simple Factory Pattern)属于创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。简单工厂模式使代码创建对象的过程变得更加灵活,而不必硬编码具体的类名。 ### 2. 角色...

    PHP设计模式之工厂模式(Factory Pattern)的讲解

    《PHP设计模式之工厂模式详解》 在面向对象编程中,设计模式是一种常见的解决特定问题的模板,它们代表了在软件设计中反复出现的问题及其解决方案。工厂模式是设计模式中的重要一环,尤其是在PHP开发中,它对于创建...

    PHP设计模式精彩剖析

    1. 工厂模式(Factory Pattern):用于创建对象的工厂类,隐藏了对象的创建逻辑,通过工厂方法返回对象。 2. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。 3. 观察者模式...

    《Learning_PHP设计模式》PDF英文版本下载.txt

    工厂模式(Factory Pattern) 工厂模式定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类。 ##### 应用场景 - 创建复杂的对象 - 创建依赖于环境的对象 - 避免条件语句 ##...

    设计模式入门指导

    - 抽象工厂模式(Abstract Factory Pattern):为创建一组相关或相互依赖的对象提供一个接口,而不需要指定它们具体的类。 - 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。 - ...

    PHP 工厂方法模式.pdf

    本文将深入探讨PHP中的工厂方法模式(Factory Method Pattern),并通过具体的例子来解释这一模式的应用场景及其优势。 #### 二、工厂方法模式定义 工厂方法模式是一种创建型设计模式,它提供了一个创建对象的最佳...

    php程序设计模式chm文档

    本书为chm格式,共分为18...第三章 工厂模式(The Factory Pattern) 第四章 单件模式 第五章 注册模式 第六章 伪对象模式 第七章 策略模式 ·· ··· ··· 有兴趣的自已下载看一看吧,比较高级,适合PHP开发人员

    深入PHP:面向对象、模式与实践(第3版)第5到8章

    这一章会介绍一些常见的设计模式,如工厂模式(Factory Pattern)用于创建对象,单例模式(Singleton Pattern)确保一个类只有一个实例,观察者模式(Observer Pattern)让多个对象可以监听某对象的状态变化,装饰器...

    php设计模式

    ##### 工厂模式(Factory Pattern) - **定义**:定义一个创建对象的接口,让子类决定实例化哪一个类。 - **应用场景**:创建复杂的对象,如创建不同类型的数据库连接。 - **优势**:提高了代码的灵活性和可扩展性...

    designpattern:PHP设计模式教程

    在这个“PHP设计模式教程”中,我们将深入探讨如何在PHP编程环境中应用这些模式,以提升代码的可读性、可维护性和可扩展性。设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**主要关注...

    pattern-guidance, Design pattern guide (PHP、Golang implementation).zip

    创建型模式关注对象的创建,如单例模式(Singleton)、工厂模式(Factory Method)和抽象工厂模式(Abstract Factory)。结构型模式涉及如何组合对象和类,例如适配器模式(Adapter)、装饰器模式(Decorator)和...

    PHP Architect's Guide to PHP Design Patterns

    - 创建型模式(Creational Patterns):如工厂模式(Factory Pattern)、抽象工厂模式(Abstract Factory Pattern)、单例模式(Singleton Pattern)、建造者模式(Builder Pattern)和原型模式(Prototype Pattern...

    PHP设计模式之简单工厂和工厂模式实例分析

    首先,简单工厂模式(Simple Factory Pattern)是一种特殊的工厂模式,它通常包含一个静态方法,该方法根据输入参数返回相应类型的对象。在这个例子中,`FruitFactory` 类就是简单工厂,它有一个 `makeDrink()` 方法...

    设计模式:用不同的编程语言编写的设计模式

    设计模式 在软件工程中,软件设计模式是对软件设计中给定上下文中常见问题的通用可重用解决方案。 它不是可以直接转换为源代码或机器代码的最终设计。 它是用于了解如何解决可以在许多不同情况下使用的问题的描述或...

    Laravel开发-laravel-pattern-generator

    5. 其他模式:除了上述常见的模式,`lararavel-pattern-generator`可能还支持更多的设计模式生成,如Observer、Event、Policy等,这些都能进一步增强Laravel应用的结构和功能。 在实际使用`laravel-pattern-...

    learn-design-pattern:自己学习设计模式的回购

    在"learn-design-pattern: 自己学习设计模式的回购"这个项目中,我们将探讨如何在PHP中应用各种设计模式。 1. **单例模式(Singleton)**:保证一个类只有一个实例,并提供一个全局访问点。在PHP中,单例模式常用于...

    php基础设计模式大全(注册树模式、工厂模式、单列模式)

    2. 工厂模式(Factory Pattern): 工厂模式是一种创建型设计模式,用于创建对象而不必暴露创建逻辑到客户端,并且通过使用一个共同的接口来指向新创建的对象。它提供了一种将对象创建逻辑封装起来的方法,使用者在...

Global site tag (gtag.js) - Google Analytics