抽象工厂模式的PHP示例代码,便于快速理解该设计模式。
-
结构图
优化前:
优化后: -
口罩工厂
interface IMask {
function showMask();
}
class LowEndMask implements IMask {
public function showMask(){
echo "我的低端口罩\n";
}
}
class HighEndMask implements IMask {
public function showMask(){
echo "我的高端口罩\n";
}
}
- 防护服工厂
interface IProtectiveSuit {
function showSuit();
}
class LowEndProtectiveSuit implements IProtectiveSuit {
public function showSuit(){
echo "我是低端防护服\n";
}
}
class HighEndProtectiveSuit implements IProtectiveSuit {
public function showSuit(){
echo "我是高端防护服\n";
}
}
- 高级工厂和低级工厂
interface IFactory {
//创建口罩
function createMask();
//创建防护服
function createSuit();
}
class LowEndFactory implements IFactory {
public function createMask() {
$mask = new LowEndMask();
// .....
// LowEndMask的100行初始化代码
return $mask;
}
public function createSuit() {
$suit = new LowEndProtectiveSuit();
// .....
// LowEndProtectiveSuit的100行初始化代码
return $suit;
}
}
class HighEndFactory implements IFactory {
public function createMask() {
$mask = new HighEndMask();
// .....
// HighEndMask的100行初始化代码
return $mask;
}
public function createSuit() {
$suit = new HighEndProtectiveSuit();
// .....
// HighEndProtectiveSuit的100行初始化代码
return $suit;
}
}
- 测试接口
class Test {
public function main() {
$factoryA = new LowEndFactory();
$factoryB = new HighEndFactory();
//创建低端口罩
$maskA = $factoryA ->createMask();
//创建高端口罩
$maskB = $factoryB ->createMask();
//创建低端防护服
$suitA = $factoryA ->createSuit();
//创建高端防护服
$suitB = $factoryA ->createSuit();
$maskA->showMask();
$maskB->showMask();
$suitA->showSuit();
$suitB->showSuit();
}
}
$tst = new Test();
$tst ->main();