PHP设计模式——抽象工厂

PHP设计模式,抽象工厂介绍

抽象工厂

提供创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类

抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。

与工厂方法区别

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

优点

易于交换产品系列

缺点

新增功能时要增加的类比较多,至少要增加三个类

PHP代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php

namespace AbstractFactory;
//=====共同接口=====

interface db
{
function conn();

}

//新增user接口
interface user
{
function insertUser();
}

interface Factory
{
function createDB();

//新增createUser函数
function createUser();
}

//=====服务器端=====

class dbmysql implements db
{
function conn()
{
echo "connect mysql!";
}
}

class dbsqlite implements db
{
function conn()
{
echo "connect sqlite!";
}
}

//新增user**类
class userMysql implements user
{
function insertUser()
{
echo "insert mysql user!";
}
}

class userSqlite implements user
{
function insertUser()
{
echo "insert sqlite user!";
}
}


class mysqlFactory implements Factory
{
function createDB()
{
return new dbmysql();
}

function createUser()
{
return new userMysql();
}
}

class sqliteFactory implements Factory
{
function createDB()
{
return new dbsqlite();
}

function createUser()
{
return new userSqlite();
}
}

//=====客户器端=====

$fact = new mysqlFactory();

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

$user = $fact->createUser();
$user->insertUser();