PHP工厂模式

为什么使用工厂模式:

在多个程序员进行一个大型项目时,经常会用到一个类,但是会加入不同的参数(比如数据库操作类),比较让人害怕的问题是,在项目完成度很高的时候,突然修改这个基类的类名或参数,会让之后的所有的对象都不可用,于是所有人又得修改他们之前的代码,采用工厂模式可以解决这个问题

工厂模式:

在实例化对象之前,使用一个工厂类静态示例化这个类,所有人都调用这个工厂类的静态方法,即使原本的类出现变化,只需要在这个工厂类修改,就可以避免所有人的代码报错

代码:

 1 header("Content-type:text/html;charset=utf-8");
 2 interface db{
 3     
 4     function select($sql);
 5     function query($sql);
 6     
 7 }
 8 class basedb implements db{
 9     
10     public function __construct($db){
11         
12         $conn = mysql_connect('localhost','root','root');
13         if(!$conn){
14             die(mysql_error());
15         }
16         mysql_select_db($db);
17         mysql_query("Set Names 'utf8'");
18     }
19     public function select($sql){
20         
21         $res = mysql_query($sql);
22         $arr = array();
23         while($row = mysql_fetch_assoc($res)){
24             $arr[] = $row;
25         }
26         return $arr;
27     }
28     public function query($sql){
29         
30         $res = mysql_query($sql);
31         if(!$res){
32             die(mysql_error());
33         }else{
34             return true;
35         }
36     }
37 }
38 class factory{
39     
40     public static function getdb($db){
41         
42         return new basedb($db);
43     
44     }
45 }
46 $a = factory::getdb('user');
47 $user = $a->select("select * from user");
48 var_dump($user);
49 
50 $b = factory::getdb('test');
51 $result = $b->query("insert into test(`title`,`content`)values('123','ABC')");
52 var_dump($result);

在以上代码中,可能觉得工厂类操作很多余,完全可以直接示例化,但是如果多个模块都有示例化的操作,而我们因为一些原因修改了类名,会导致所有有关这个类的代码全部失效,为了避免这个问题,可以通过上面的工厂类来形成一种过渡缓冲的作用。

单例模式与工厂模式的区别:

单例模式适用那些参数固定且出现次数多的类。

工厂模式适用参数不固定且出现次数多的类。

posted @ 2017-06-24 09:41  程昱仲德  阅读(142)  评论(0编辑  收藏  举报