浅谈php设计模式(1)---工厂模式
2020-11-24 10:52
标签:style blog class code java color 一.接口继承直接调用 先看看这样一段代码: 在客户端调用mysql连接时,我们用了如下代码 最后的显示结果为: 连接到了mysql 优点:直接调用,简单明了 缺点:在这个过程中,客户端很清楚的知道我们服务器端的两个数据库连接类,所以不够安全。而我们要做的就是不让用户知道我们有这么两个类,只让他们知道我们连接了那个数据库。 所以,就要用到下面的模式。即 二、简单工厂模式 其代码如下: 这样我们就可以直接使用工厂来调用。其代码如下 输出结果为: 连接到了mysql 优点:客户端应该只看到接口,不知道接口的实现.
体现封装隔离原则. 缺点:如果新增加了PDO方式,则要又要修改Factory类,违反了开闭原则。即软件实体应当对扩展开放,对修改关闭。 三、工厂模式 工厂方法中,一个工厂生产多个零件,但零件的共同特点是--属于一个产品. 即 此工厂可以生产产品,而非单独的对象。 实现过程如下: 1)定义一个Factory接口用来创建数据库。(注:db接口是用来连接数据库) 2)定义连接工厂 3)客户端可以调用工厂 4)当增加了oracle连接方式,我们怎么办了?只需要增加工厂和方法就可以了,无需去修改factory。 5)这样可以直接调用了 浅谈php设计模式(1)---工厂模式,搜素材,soscw.com 浅谈php设计模式(1)---工厂模式 标签:style blog class code java color 原文地址:http://www.cnblogs.com/eryuefei/p/3704164.html 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 ?>
1 $db=new dbmysql();
2 $db->conn();
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();
interface Factory{
function createDB();
}
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 }
$fact=new mysqlFactory();
$db=$fact>createDB();
$db->$conn();
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 }
$fact=new oracleFactory();
$db=$fact>createDB();
$db->$conn();