浅谈php设计模式(1)---工厂模式
2014-05-02 16:27
495 查看
一.接口继承直接调用
先看看这样一段代码:
在客户端调用mysql连接时,我们用了如下代码
最后的显示结果为: 连接到了mysql
优点:直接调用,简单明了
缺点:在这个过程中,客户端很清楚的知道我们服务器端的两个数据库连接类,所以不够安全。而我们要做的就是不让用户知道我们有这么两个类,只让他们知道我们连接了那个数据库。
所以,就要用到下面的模式。即
二、简单工厂模式
其代码如下:
这样我们就可以直接使用工厂来调用。其代码如下
输出结果为: 连接到了mysql
优点:客户端应该只看到接口,不知道接口的实现. 体现封装隔离原则.
缺点:如果新增加了PDO方式,则要又要修改Factory类,违反了开闭原则。即软件实体应当对扩展开放,对修改关闭。
三、工厂模式
工厂方法中,一个工厂生产多个零件,但零件的共同特点是--属于一个产品. 即 此工厂可以生产产品,而非单独的对象。
实现过程如下:
1)定义一个Factory接口用来创建数据库。(注:db接口是用来连接数据库)
2)定义连接工厂
3)客户端可以调用工厂
4)当增加了oracle连接方式,我们怎么办了?只需要增加工厂和方法就可以了,无需去修改factory。
5)这样可以直接调用了
先看看这样一段代码:
<?php interface db{ function conn(); } class dbmysql implements db { public function conn(){ echo "连接到了mysql"; } } class dbsqlite implements db{ public function conn(){ echo "连接到了sqlite"; } } ?>
在客户端调用mysql连接时,我们用了如下代码
$db=new dbmysql(); $db->conn();
最后的显示结果为: 连接到了mysql
优点:直接调用,简单明了
缺点:在这个过程中,客户端很清楚的知道我们服务器端的两个数据库连接类,所以不够安全。而我们要做的就是不让用户知道我们有这么两个类,只让他们知道我们连接了那个数据库。
所以,就要用到下面的模式。即
二、简单工厂模式
其代码如下:
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); } } }
这样我们就可以直接使用工厂来调用。其代码如下
$db=Factory::createDB('mysql'); $db->conn();
输出结果为: 连接到了mysql
优点:客户端应该只看到接口,不知道接口的实现. 体现封装隔离原则.
缺点:如果新增加了PDO方式,则要又要修改Factory类,违反了开闭原则。即软件实体应当对扩展开放,对修改关闭。
三、工厂模式
工厂方法中,一个工厂生产多个零件,但零件的共同特点是--属于一个产品. 即 此工厂可以生产产品,而非单独的对象。
实现过程如下:
1)定义一个Factory接口用来创建数据库。(注:db接口是用来连接数据库)
interface Factory{ function createDB(); }
2)定义连接工厂
class mysqlFactory implements Factory{ public function createDB(){ return new dbmysql(); } } class sqliteFactory implements Factory{ public function createDB(){ return new dbsqlite(); } }
3)客户端可以调用工厂
$fact=new mysqlFactory(); $db=$fact>createDB(); $db->$conn();
4)当增加了oracle连接方式,我们怎么办了?只需要增加工厂和方法就可以了,无需去修改factory。
class dboracle implements db(){ public function conn(){ echo "连接到了oracle";} } class oracleFactory implements Factory(){ public function createDB(){ return new dboracle(); } }
5)这样可以直接调用了
$fact=new oracleFactory(); $db=$fact>createDB(); $db->$conn();
相关文章推荐
- php常用设计模式(策略模式/单例模式/工厂模式)
- PHP 设计模式 单例模式 工厂模式 注册模式
- 浅谈php设计模式之责任链模式
- php部分---面向对象,设计模式(单例模式、工厂模式)、oop六大原则;
- php设计模式之工厂模式(工厂模式实现计算器功能)
- 魔兽争霸之PHP设计模式-工厂模式[Factory]
- 浅谈设计模式之简单工厂模式、工厂模式、抽象工厂模式
- php模式设计之 工厂模式
- php设计模式(工厂模式)
- php设计模式-工厂模式
- php设计模式(1)-工厂模式
- PHP设计模式 -- 工厂模式
- 浅谈Java设计模式(一)工厂模式
- Java-设计模式-工厂模式浅谈(二)-工厂方法模式
- PHP设计模式之:工厂模式
- php设计模式 — 工厂方法模式(多态性工厂模式) (虚拟构造子模式)
- php 设计模式(注册器模式+工厂模式+数据库映射模式,单例模式+工厂模式+注册器模式混合使用)
- 浅谈php之设计模式基础
- PHP设计模式---工厂模式
- Java-设计模式-工厂模式浅谈(〇)