-
Notifications
You must be signed in to change notification settings - Fork 699
/
Copy pathtest.php
46 lines (37 loc) · 1.21 KB
/
test.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
<?php
/**
* 创建型模式
* 工厂方法模式和抽象工厂模式的核心区别
* 工厂方法模式利用继承,抽象工厂模式利用组合
* 工厂方法模式产生一个对象,抽象工厂模式产生一族对象
* 工厂方法模式利用子类创造对象,抽象工厂模式利用接口的实现创造对象
* 工厂方法模式可以退化为简单工厂模式(非23中GOF)
*
* php工厂模式
* @author TIGERB <https://github.com/TIGERB>
* @author jealone <https://github.com/jealone>
* @example 运行 php test.php
*/
// 注册自加载
spl_autoload_register('autoload');
function autoload($class)
{
require dirname($_SERVER['SCRIPT_FILENAME']) . '//..//' . str_replace('\\', '/', $class) . '.php';
}
/************************************* test *************************************/
use factory\Farm;
use factory\Zoo;
use factory\SampleFactory;
// 初始化一个工厂
$farm = new Farm();
// 生产一只鸡
$farm->produce('chicken');
// 生产一只猪
$farm->produce('pig');
// 初始化一个动物园工厂
$zoo = new Zoo();
$zoo->produce("chicken");
$zoo->produce("pig");
// 工厂方法模式退化为简单工厂模式
SampleFactory::produce("chicken");
SampleFactory::produce("pig");