设计模式之抽象工厂模式

1.抽象工厂模式

目录

1.1.模式定义

1.2.模式分析

1.3.模式结构

1.4.模式实现

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?php
/**
* Abstract Product
*/
abstract class Storage
{
abstract function use (): void;
}
/**
* ConcreteProduct
*/
class QiNiuStorage extends Storage
{
public function use (): void
{
}
}
/**
* ConcreteProduct
*/
class YouPaiStorage extends Storage
{
public function use (): void
{
}
}
/**
* Abstract Product
*/
abstract class Live
{
abstract function use (): void;
}
/**
* ConcreteProduct
*/
class QiNiuLive extends Live
{
public function use (): void
{
}
}
/**
* ConcreteProduct
*/
class YouPaiLive extends Live
{
public function use (): void
{
}
}
/**
* Abstract Product
*/
abstract class Cdn
{
abstract function use (): void;
}
/**
* ConcreteProduct
*/
class QiNiuCdn extends Cdn
{
public function use (): void
{
}
}
/**
* ConcreteProduct
*/
class YouPaiCdn extends Cdn
{
public function use (): void
{
}
}
/**
* Abstract Factory
*/
abstract class Factory
{
abstract public function createStorage(): Storage;
abstract public function createLive(): Live;
abstract public function createCdb(): Cdn;
}
/**
* Concrete Factory
*/
class QiNiuFactory extends Factory
{
public function createStorage(): Storage
{
return new QiNiuStorage();
}
public function createLive(): Live
{
return new QiNiuLive();
}
public function createCdb(): Cdn
{
return new QiNiuCdn();
}
}
/**
* Concrete Factory
*/
class YouPaiFactory extends Factory
{
public function createStorage(): Storage
{
return new YouPaiStorage();
}
public function createCdb(): Cdn
{
return new YouPaiCdn();
}
public function createLive(): Live
{
return new YouPaiLive();
}
}
$qiNiuFactory = new QiNiuFactory();
$qiNiuStorage = $qiNiuFactory->createStorage();
$qiNiuLive = $qiNiuFactory->createLive();
$qiNiuCdn = $qiNiuFactory->createCdb();
print_r($qiNiuStorage);
print_r($qiNiuLive);
print_r($qiNiuCdn);