介绍
抽象工厂模式也可以叫为产品族模式,因为它是负责一个套餐的生产。比如一个硬件代工厂要生产 Mac
的鼠标和键盘,然后又接到了华为的鼠标和键盘生成需求。因为华为和 Mac
是两个不同的公司,所以他们的产品外观,性能也有不同要求。然后将这些组合起来一起,就形成了一个产品族。
项目结构

UML
图

代码
Mouse.php
1 2 3 4 5 6 7
| <?php
interface Mouse { public function click(); }
|
Keyboard.php
1 2 3 4 5 6 7
| <?php
interface Keyboard { public function input(); }
|
Factory.php
1 2 3 4 5 6 7 8 9
| <?php
interface Factory { public function createMouse();
public function createKeyboard(); }
|
WinKeyboard.php
1 2 3 4 5 6 7 8 9 10 11
| <?php
class WinKeyboard implements Keyboard {
public function input() { return 'win keyboard input'; } }
|
WinMouse.php
1 2 3 4 5 6 7 8 9 10 11
| <?php
class WinMouse implements Mouse {
public function click() { return 'win mouse click'; } }
|
MacKeyboard.php
1 2 3 4 5 6 7 8 9 10 11
| <?php
class MacKeyboard implements Keyboard {
public function input() { return 'mac keyboard input'; } }
|
MacMouse.php
1 2 3 4 5 6 7 8 9 10 11
| <?php
class MacMouse implements Mouse {
public function click() { return 'mac mouse click'; } }
|
WinFactory.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php
class WinFactory implements Factory {
public function createMouse() { return new WinMouse(); }
public function createKeyboard() { return new WinKeyboard(); } }
|
MacFactory.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?php
class MacFactory implements Factory {
public function createKeyboard() { return new MacKeyboard(); }
public function createMouse() { return new MacMouse(); } }
|
总结
抽象工厂模式与工厂方法模式非常类似,抽象工厂模式更多的是将工程类接口变耦合了,所以要想改变产品的 等级结构 是非常麻烦的,但是扩展产品族却非常容易。