`
天梯梦
  • 浏览: 13746640 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

PHP 中使用工厂模式

阅读更多

>>PHP实现单件模式的几种方式

工厂类是指包含一个专门用来创建其他对象的方法的类,工厂类在多态性编程实践中是至关重要的,它允许动态的替换类,修改配置,通常会使应用程序更加 灵活,熟练掌握工厂模式高级PHP开发人员是很重要的。

 

  工厂模式通常用来返回符合类似接口的不同的类,工厂的一种常见用法就是创建多态的提供者,从而允许我们基于应用程序逻辑或者配置设置来决定应实例化哪一个 类,例如,可以使用这样的提供者来扩展一个类,而不需要重构应用程序的其他部分,从而使用新的扩展后的名称 。

 

  通常,工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然而这只是一种原则,工厂方法可以任意命名,这个静态还可以接受任意数据 的参数,必须返回一个对象。

 

基本的工厂类

 

class MyObject{
  //对象将从工厂返回
}

class MyFactory{
public static function factory(){
return new MyObject():
   }
}

$instance=MyFactory::factory();
 


使用工厂类解析图像文件

 

<?php
interface IImage{
	function getHeight();
	function getWidth();
	function getData();
}

class Image_PNG implements IImage{
	
	private $_width,$_height,$_data;
	
	public function __construct($file){
		$this->_file=$file;
		$this->_parse();
	}
		
    private function _parse(){
			
			//完成PNG格式的解析工作
			//并填充$_width,$_height,$_data;
		}
		
		
	public function getWidth(){
		return $this->_width;
	}
	public  function getHeight(){
		return $this->_height;
	}
	
	public function getData(){
	   return $this->_data;
	
	}
	
}

class Image_JPEG implements IImage{
	
	private $_width,$_height,$_data;
	
	public function __construct($file){
		$this->_file=$file;
		$this->_parse();
	}
		
    private function _parse(){
			
			//完成JPEG格式的解析工作
			//并填充$_width,$_height,$_data;
		}
		
		
	public function getWidth(){
		return $this->_width;
	}
	public  function getHeight(){
		return $this->_height;
	}
	
	public function getData(){
	   return $this->_data;
	
	}
	
}

class ImageFactory{
	
	public static function factory($file){
		$pathParts=pathinfo($file);
		switch (strtolower($pathParts['extension']))
		{
			case 'jpg':
				$ret=new Image_JPEG($file);
				break;
			case 'png':
				$ret=new Image_PNG($file);
				break;
				default:
					//有问题

					
		}
		if($ret instanceof IImage){
			return $ret;
		}else {
			//有问题
		}
	}
}

//当使用图像文件名调用 工厂方法时,根据传入的文件类型不同,取得不同对象。
 
//调用ImageFactoyr
$image=ImageFactory::factory('/path/to/my.jpg');
//$image是Image_JPEG类的一个实例
echo $image->getWidth();
 

使用工厂类解决数据库可移值性问题,在数据库应用程序中,工厂模式可以在以下两个方面起作用。

1.使软件更容易支持各种不同的数据库平台,用于扩展用户群

2.如果软件是内部使用,需要修改数据库时,可以容易将应用程序移值到别一个平台

 

在代码中,创建了一个名为User的数据库表来测试它,这个表定义一个名为email的varchar类型字段

 

<?php
interface IDatabaseBindings{
	public function userExists($email);
}

class PGSQL implements IDatabaseBindings{
	protected $_connection;
	
	public function __construct(){
		
		$this->_connection=pg_connect('dbname=example_db');
	}
	
	public function userExists($email){
		
		$emailEscaped=pg_escape_string($email);
		$query="select 1 from users where email='".$emailEscaped."'";
		if($result=pg_query($query,$this->_connection)){
			return (pg_num_rows($result)>0)?true:false;
		}else{
			return false;
		}
	}
	
}

class MYSQL implements IDatabaseBindings{
	
	protected $_connection;
	
	public function __construct(){
		
		$this->_connection=mysql_connect('localhost');
		mysql_select_db('example_db',$this->_connection);
	}
	
	public function userExists($email){
		
		$emailEscaped=mysql_real_escape_string($email);
		$query="select 1 from users where email='".$emailEscaped."'";
		if($result=mysql_query($query,$this->_connection)){
			return (mysql_num_rows($result)>0)?true:false;
		}else{
			return false;
		}
	}
	
}

class DatabaseFactory{
	
	public static function factory(){
		$type=loadtypefromconfigfile();
		switch ($type){
			case 'PGSQL':
				return new PGSQL();
				break;
			case 'MYSQL':
				return new MYSQL();
				break;
		}
	}
}
 

应用程序不必知道它与何种类型的数据库连接,只会基于IDatabaseBindings接口定义的规则直接与工厂返回的实例打交道。

 

//调用DatabaseFactoy
$db=DatabaseFactory::factory();
$db->userExists('person@example.com');
 

 

>>PHP实现单件模 式的几种方式

 

 

 

 

分享到:
评论

相关推荐

    php单例模式和工厂模式

    在工厂模式中,当创建对象时,不会直接实例化对象,而是通过一个专门的工厂类来创建。工厂类可以根据提供的参数来决定创建哪种类型的实例。 在 PHP 中,工厂模式的实现通常包括以下步骤: 1. 定义一个接口或抽象类...

    工厂模式 - PHP版

    工厂模式是一种常用的设计模式,它在软件工程中用于创建对象,提供了一种封装产品创建的方式。在PHP中,工厂模式的应用同样广泛,特别是在需要动态决定实例化哪个类或者需要隔离类与实例化过程的情况下。本篇文章将...

    PHP 简单工厂模式例子

    简单工厂模式是软件设计模式中的一种,它在PHP编程中被广泛使用,特别是在处理对象创建时需要根据条件或参数动态选择具体类的情况。这个模式的主要目的是为了封装对象的创建过程,使得客户端代码无需关心具体对象的...

    PHP实现工厂模式设计日志记录器

    在软件设计模式中,工厂模式是一种常用的创建型模式,它提供了一种创建对象的最佳方式。在PHP中,工厂模式能够帮助我们解耦代码,使得代码更具有灵活性和可扩展性。在这个例子中,我们将深入探讨如何使用工厂模式来...

    PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf

    在 PHP 中,可以使用静态工厂方法来实现简单工厂模式。 在使用简单工厂模式时,需要注意以下几点: * 需要定义一个工厂接口,用于声明创建对象的方法。 * 需要实现多个具体的工厂类,每个类都实现了工厂接口。 * ...

    php设计模式代码

    在PHP中,工厂模式可以用来抽象产品创建过程,使得更换或扩展产品变得更加容易。 3. **抽象工厂模式**:这是一种更高级别的工厂模式,它可以创建一系列相关的或者相互依赖的对象,而无需指定它们的具体类。 4. **...

    设计模式一:简单工厂模式(PHP源码)

    简单工厂模式是软件设计模式中的一种,它属于创建型模式,主要用来解决对象的创建问题。在PHP中,我们可以利用这种模式来简化对象的实例化过程,减少代码的耦合度,提高代码的可维护性。 简单工厂模式的核心思想是...

    抽象工厂模式 - PHP版

    在PHP中,抽象工厂模式尤其适用于那些需要创建一系列相关或相互依赖的对象,而又不希望硬编码具体类名的情况。通过这种方式,抽象工厂模式能够将对象的创建过程与使用过程分离,提高代码的可扩展性和可维护性。 ...

    设计模式之单件模式、工厂模式、策略模式、观察者模式(php描述)(资料整理)

    在PHP中,工厂模式可以用来解耦对象的创建和使用,使得更换或扩展产品类型变得更加容易。工厂类负责创建对象,客户端只需要知道工厂,无需关心具体的产品实现。 接下来是策略模式,它定义了一系列算法,并将每个...

    简单工厂模式详述

    简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但...在Sunny软件公司的图表库场景中,采用简单工厂模式可以显著改善代码结构,提高代码的可读性和可维护性,同时降低类之间的耦合度,便于未来扩展。

    PHP设计模式

    在本书中,读者将会学习到如何使用不同的设计模式来解决PHP程序设计中遇到的问题,比如如何使用工厂模式来实现依赖注入,或者如何利用单例模式确保在应用程序中只有一个数据库连接实例。此外,书中可能会通过实例来...

    工厂模式与单例模式

    在软件设计模式中,工厂模式和单例模式是两种非常基础且重要的模式,它们都是用于解决对象创建问题,但有着不同的设计理念和应用场景。本篇文章将深入探讨这两种模式,并结合具体的代码示例`myFactoryDemo`进行讲解...

    PHP5设计模式-抽象工厂模式实现

    PHP实现的抽象工厂模式,大家可以下载来参考学习下。

    PHP设计模式.rar

    以上只是PHP设计模式中的一部分,每种模式都有其独特的应用场景和价值。通过学习和掌握这些设计模式,开发者可以更好地设计和重构代码,提高软件的灵活性、可读性和可维护性。在实际开发过程中,应根据项目的具体...

    PHP设计模式 ((美)Aaron Saray) 中文pdf扫描版

    设计模式是软件工程中的最佳实践,它们是解决常见问题的经验总结,使得代码更加模块化、可复用,并能应对复杂系统的设计挑战。 设计模式分为三大类:创建型、结构型和行为型。创建型模式关注对象的创建过程,如单例...

    php设计模式介绍,php设计模式介绍

    以上只是PHP设计模式中的一部分,每种模式都有其适用的场景和价值。通过学习和应用这些设计模式,开发者可以写出更高效、更具扩展性和易于维护的代码。在实际项目中,根据需求灵活选择和组合设计模式,可以显著提高...

    PHP高级程序设计 模式、框架与测试 中文高清PDF版

    例如,工厂模式、单例模式、观察者模式等,都是在PHP开发中经常用到的设计模式。通过理解这些模式,开发者可以写出更灵活、可扩展的代码,并且能够更好地与其他开发者协作。 再者,“框架”章节会介绍一些流行的PHP...

    Learning PHP设计模式 ([美]William Sanders) 中文pdf扫描版

    在PHP中,事件驱动编程常常使用观察者模式。 5. 建造者模式:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在PHP中,建造者模式可用于复杂对象的构造,如用户配置或数据库查询构造。 ...

    php设计模式

    在工厂模式中,创建对象的实例的任务被委托给专门的工厂类。 5. 观察者模式(Observer):观察者模式定义了对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会收到通知并自动更新。在PHP开发...

Global site tag (gtag.js) - Google Analytics