码迷,mamicode.com
首页 > Web开发 > 详细

浅谈php设计模式(1)---工厂模式

时间:2014-05-10 19:59:48      阅读:462      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

一.接口继承直接调用

先看看这样一段代码:

bubuko.com,布布扣
 1 <?php
 2  
 3  interface db{
 4     function conn();
 5 }
 6 
 7 class dbmysql implements db {
 8     public function conn(){
 9                   echo "连接到了mysql";
10     }
11 }
12 
13 class dbsqlite implements db{
14     public function conn(){
15         echo "连接到了sqlite";
16     }
17 }
18 
19 ?>
bubuko.com,布布扣

在客户端调用mysql连接时,我们用了如下代码

1 $db=new dbmysql();
2 $db->conn();

最后的显示结果为: 连接到了mysql 

优点:直接调用,简单明了

缺点:在这个过程中,客户端很清楚的知道我们服务器端的两个数据库连接类,所以不够安全。而我们要做的就是不让用户知道我们有这么两个类,只让他们知道我们连接了那个数据库。

所以,就要用到下面的模式。即

二、简单工厂模式

其代码如下:

bubuko.com,布布扣
class Factory{
    public static function  createDB($type){
        if($type==‘mysql‘){
            return new dbmysql();
        }else if($type==‘sqlite‘){
            return new dbsqlite();
        }else{
            throw new Exception("Error db type ",1);
        }
    }
}
bubuko.com,布布扣

这样我们就可以直接使用工厂来调用。其代码如下

$db=Factory::createDB(‘mysql‘);
$db->conn();

输出结果为: 连接到了mysql 

优点:客户端应该只看到接口,不知道接口的实现. 体现封装隔离原则.

缺点:如果新增加了PDO方式,则要又要修改Factory类,违反了开闭原则。即软件实体应当对扩展开放,对修改关闭。

三、工厂模式

工厂方法中,一个工厂生产多个零件,但零件的共同特点是--属于一个产品. 即 此工厂可以生产产品,而非单独的对象。

实现过程如下:

1)定义一个Factory接口用来创建数据库。(注:db接口是用来连接数据库)

interface Factory{
    function createDB();
}

2)定义连接工厂

bubuko.com,布布扣
 1 class mysqlFactory implements Factory{
 2     public function createDB(){
 3         return new dbmysql();
 4     }
 5 }
 6 
 7 class sqliteFactory implements Factory{
 8     public function createDB(){
 9         return new dbsqlite();
10     }
11 }
bubuko.com,布布扣

3)客户端可以调用工厂

$fact=new mysqlFactory();
$db=$fact>createDB();
$db->$conn();

4)当增加了oracle连接方式,我们怎么办了?只需要增加工厂和方法就可以了,无需去修改factory。

bubuko.com,布布扣
 1 class dboracle implements db(){
 2     public function conn(){
 3     echo "连接到了oracle";}
 4 }
 5 
 6 class oracleFactory implements Factory(){
 7     public function createDB(){
 8         return new dboracle();
 9     }
10 }
bubuko.com,布布扣

5)这样可以直接调用了

$fact=new oracleFactory();
$db=$fact>createDB();
$db->$conn();

 

 

 

浅谈php设计模式(1)---工厂模式,布布扣,bubuko.com

浅谈php设计模式(1)---工厂模式

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/eryuefei/p/3704164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!