简单工厂模式
简单工厂模式:提供获取某个类的新实例的一个接口,同时使调用代码避免确定实际实例化基类的步骤
请看下面代码
<?php class mysql_DB{ } class sqlite_DB{ } class pdo_DB{ } class Factory{ public static function getDB($type){ if(strtolower($type)=='mysql'){ return new mysql_DB(); } else if(strtolower("sqlite")=="sqlite") { return new sqlite_DB(); } else { return new pdo_DB(); } //或者用下面的代码实现: // $type=strtolower($type)."_DB"; // return new $type(); } } $a=Factory::getDB("sqlite"); var_dump($a);//object(sqlite_DB)#1 (0) { } $b=Factory::getDB("mysql"); var_dump($b);//object(mysql_DB)#2 (0) { } ?>
如果不将Factory中的代码封装一下的话,那么在每次要实例化对象时,都得有那么多行的if..else if ...或者switch/case来判断到底要实例化哪个对象;
如果有一百个页面都要实例化这类对象,如果不封装,那这么多的判断条件就得写100次,一方面,这么多代码写着也挺浪费时间的(有时候if/else if或者switch/case多达几十个),就算你复制粘贴一百次也是一样;另一方面,一旦要修改这些判断中的某条语句,那么100个页面就得挨个修改,哪怕之后只增加一个两三行的判断。
所以可以这些判断进行封装,封装在一个工厂类的静态方法中,这个通过调用这个工厂中的静态方法(也就是工厂类提供给外界一个接口),然后获得一个新实例的对象,不用每次都写一次判断,减少了很多步骤,这就减少了很多错误的发生,还便于修改。在其他页面中,直接用include包含这个文件即可。
简单工厂有一定的局限,可以看另一篇博文:工厂模式
如需转载,请注明文章出处,谢谢!!!