当前位置:Gxlcms > PHP教程 > php中设计模式工厂模式和单例模式实例_PHP教程

php中设计模式工厂模式和单例模式实例_PHP教程

时间:2021-07-01 10:21:17 帮助过:9人阅读

php中设计模式工厂模式和单例模式实例,有需要的朋友可参考一下。

1.工厂模式


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


主要作用是降低耦合度。

代码如下

abstract class Operation{
abstract public function getValue($num1,$num2);
public function getAttr(){
return 1;
}
}
class Add extends Operation{
public function getValue($num1, $num2){
return $num1+$num2;
}
}

class Sub extends Operation{
public function getValue($num1, $num2){
return $num1-$num2;
}
}

class Factory{
public static function CreateObj($operation){

switch ($operation){
case '+': return new Add();
case '-': return new Sub();
}

}
}

$Op=Factory::CreateObj('-');
echo $Op->getValue(3, 6);

用在真正开发中一般当做数据库选择类。


实例2 显示使用工厂方法的一个示例。

代码如下

interface IUser
{
function getName();
}

class User implements IUser
{
public static function Load( $id )
{
return new User( $id );
}

public static function Create( )
{
return new User( null );
}

public function __construct( $id ) { }

public function getName()
{
return "Jack";
}
}

$uo = User::Load( 1 );
echo( $uo->getName()."n" );
?>

这段代码要简单得多。它仅有一个接口 IUser 和一个实现此接口的 User 类。User 类有两个创建对象的静态方法。此关系可用图 2 中的 UML 表示


PHP里通过工厂模式提高效率


我们建立以下四个文件

代码如下

index.php

include_once("f.inc.php");
$f=new factory;
$t1=&$f->create('T1');
echo $t1->getName();
echo $config;
?>
f.inc.php

class factory
{
function factory()
{
$this->mClasses=array('T1'=>'t1.inc.php','T2'=>'t2.inc.php');
}
function &create($class)
{
if (!class_exists($class))
{
require_once($this->mClasses[$class]);
}
return new $class;
}
}
?>
t1.inc.php

global $config;
$config='surfchen';
class T1
{
var $mName='name::T1';
function getName()
{
return $this->mName;
}
}
?>
t2.inc.php

class T2
{
function T2()
{
echo 't2 is ok';
}
}
?>

在index.php里,我们通过一个factory类来创建其他的类实例。
在factory里,保存有一个数组$this->mClasses,格式为array(“类名”=>”类文件路径”).
我们通过factory::create()来创建一个类实例的时候,在create()里,会首先检测类是否存在,如果不存在,就根据$this->mClasses把类对应的类文件包含进来。然后创建并返回一个该类的实例。

这样,我们只需要把factory类文件包含进执行的脚本(如index.php)中就可以了。

大家可能还注意到了在t1.inc.php中的这两行代码。

代码如下
global $config;
$config='surfchen';

2单例模式

简单来说,PHP单例模式就是一个功能用一个类来实现,并且在整个应用程序当中只有一个这个类的实例存在;

工厂模式强调的是面向对象的多态性,它可以把功能上的差异部分封装起来,对外实现共有的功能,比如说数据库的链接,由于数据库的不同,我们可能需要写不同的方法去实现数据库的链接,但作为应用程序来讲,它不需要了解数据库用的是MySQL还是Oracle,它只需要用query()这个方法去执行数据库的相应操作即可。这样就屏蔽了差异,使类更加健壮!

代码如下

class Mysql{
public static $conn;
public static function getInstance(){
if (!self::$conn){
new self();
return self::$conn;
}else {
return self::$conn;
}

}
private function __construct(){
self::$conn= "mysql_connect:";// mysql_connect('','','')
}

public function __clone()
{
trigger_error("Only one connection");
}
}

echo Mysql::getInstance();
echo Mysql::getInstance();

实际中用作数据库连接类和工厂模式一起使用,根据参数调用单例模式,可以提高资源使用效率

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/631278.htmlTechArticlephp中设计模式工厂模式和单例模式实例,有需要的朋友可参考一下。 1.工厂模式 工厂模式 是一种类,它具有为您创建对象的某些方法。您可...

人气教程排行