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 显示使用工厂方法的一个示例,代码如下:
<?php 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 类有两个创建对象的静态方法.PHP里通过工厂模式提高效率
我们建立以下四个文件,代码如下:
//index.php <?php include_once( "f.inc.php" ); $f= new factory; $t1=&$f->create( 'T1' ); echo $t1->getName(); echo $config; ?> //f.inc.php <?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 <?php global $config; $config= 'surfchen' ; class T1 { var $mName= 'name::T1' ; function getName() { return $ this ->mName; } } ?> //t2.inc.php <?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();实际中用作数据库连接类和工厂模式一起使用,根据参数调用单例模式,可以提高资源使用效率.
查看更多关于php中设计模式工厂模式和单例模式实例 - php高级的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29911