-
Notifications
You must be signed in to change notification settings - Fork 50
/
Copy pathfactory.php
99 lines (81 loc) · 1.62 KB
/
factory.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
97
98
99
<?php
/**
* Created by PhpStorm.
* User: lock
* Date: 2017/7/16
* Time: 00:08
* 工厂方法模式
* 定义一个创建对象的接口,
* 但是让子类去实例化具体类。工厂方法模式让类的实例化延迟到子类中。
*/
interface calcFactory{
public function createOperate();
}
class addFactory implements calcFactory{
public function createOperate() {
return new addOperate();
}
}
class subFactory implements calcFactory{
public function createOperate() {
return new subOperate();
}
}
/**
* 加法
* Class addOperate
*/
class addOperate extends operate{
public function getRes() {
return $this->a + $this->b;
}
}
/**
* 减法
* Class subOperate
*/
class subOperate extends operate{
public function getRes(){
return $this->a - $this->b;
}
}
/**
* 操作类
* Class operate
*/
abstract class operate{
public $a;
public $b;
public function setA($num){
$this->a = $num;
}
public function getA(){
$this->a;
}
public function setB($num){
$this->b=$num;
}
public function getB(){
$this->b;
}
abstract public function getRes();
}
/**
* Class Client
*/
class Client{
public static function start(){
$add = new addFactory();
$addObj = $add->createOperate();
$addObj->setA(10);
$addObj->setB(12);
echo $addObj->getRes();
echo PHP_EOL;
$sub = new subFactory();
$subObj = $sub->createOperate();
$subObj->setA(30);
$subObj->setB(15);
echo $subObj->getRes();
}
}
Client::start();