抽象工厂模式
用简单的话来描述一下简单工厂,工厂方法和抽象工厂最直观的区别:
- 简单工厂是一个工厂生产某一类产品;
- 工厂方法是用多个工厂来生产某一类产品;
- 抽象工厂就是用多个工厂来生产多类产品;
这样说不够直观,下面用个例子来说明一下:
- /*
- * 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。
- * 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。
- * 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。
- */
- // 多个产品接口,用于产生产品族
- interface Box
- {
- public function name();
- }
- interface Tree
- {
- public function name();
- }
- // 实现产品
- class BigBox implements Box
- {
- public function name()
- {
- echo "Big box\n";
- }
- }
- class SmallBox implements Box
- {
- public function name()
- {
- echo "Small box\n";
- }
- }
- class BigTree implements Tree
- {
- public function name()
- {
- echo "Big Tree\n";
- }
- }
- class SmallTree implements Tree
- {
- public function name()
- {
- echo "Small Tree\n";
- }
- }
- // 工厂接口
- interface Builder
- {
- public function buildBox();
- public function buildTree();
- }
- // 创建两个工厂
- class BigBuilder implements Builder
- {
- public function buildBox()
- {
- return new BigBox();
- }
- public function buildTree()
- {
- return new BigTree();
- }
- }
- class SmallBuilder implements Builder
- {
- public function buildBox()
- {
- return new SmallBox();
- }
- public function buildTree()
- {
- return new SmallTree();
- }
- }
- // 调用
- $BigBuilder = new BigBuilder();
- $box = $BigBuilder->buildBox();
- $box->name();
- $tree = $BigBuilder->buildTree();
- $tree->name();
- $SmallBuilder = new SmallBuilder();
- $box = $SmallBuilder->buildBox();
- $box->name();
- $tree = $SmallBuilder->buildTree();
- $tree->name();
输出结果:
- Big box
- Big Tree
- Small box
- Small Tree
本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1032731,如需转载请自行联系原作者