Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69719
  • 博文数量: 18
  • 博客积分: 492
  • 博客等级: 下士
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-24 20:27
文章分类
文章存档

2011年(18)

分类: 系统运维

2011-04-12 12:35:41

  1. <?php
  2. /**
  3. * 工厂模式
  4. */

  5. /**
  6.  * 比萨商店抽象类
  7.  */
  8. abstract class PizzaStore
  9. {
  10.     public abstract function createPizza($type);

  11.     public function orderPizza($type)
  12.     {
  13.         $pizza = $this->createPizza($type);
  14.         echo "食物名称:{$pizza->name}\n";
  15.         echo "制作方法:{$pizza->make()}\n";
  16.         echo "包装方式:{$pizza->box()}\n";
  17.     }
  18. }

  19. /**
  20.  * 美国风味比萨店
  21.  * 有芝士、香肠两种口味
  22.  */
  23. class USAPizza extends PizzaStore
  24. {
  25.     public function createPizza($type)
  26.     {
  27.         if ($type == 'cheese') {
  28.             return new CheesePizza();
  29.         } elseif ($type == 'sausage') {
  30.             return new SausagePizza();
  31.         } else {
  32.             return null;
  33.         }
  34.     }
  35. }

  36. /**
  37.  * 中国风味比萨店
  38.  * 有韭菜鸡蛋、西葫芦两种口味
  39.  */
  40. class CHINAPizza extends PizzaStore
  41. {
  42.     public function createPizza($type)
  43.     {
  44.         if ($type == 'egg') {
  45.             return new EggPizza();
  46.         } elseif ($type == 'xhl') {
  47.             return new XhlPizza();
  48.         } else {
  49.             return null;
  50.         }
  51.     }
  52. }

  53. /**
  54.  * 比萨抽象类
  55.  */
  56. abstract class Pizza
  57. {
  58.     public $name;

  59.     public abstract function make();
  60.     public abstract function box();
  61. }

  62. class CheesePizza extends Pizza
  63. {
  64.     public $name = '芝士口味的比萨';

  65.     public function make()
  66.     {
  67.         return '面饼上面撒些芝士粉';
  68.     }

  69.     public function box()
  70.     {
  71.         return '装载四方的纸盒子里';
  72.     }
  73. }

  74. class SausagePizza extends Pizza
  75. {
  76.     public $name = '香肠口味的比萨';

  77.     public function make()
  78.     {
  79.         return '面饼上面撒些香肠薄片';
  80.     }

  81.     public function box()
  82.     {
  83.         return '装载四方的纸盒子里';
  84.     }
  85. }

  86. class EggPizza extends Pizza
  87. {
  88.     public $name = '韭菜鸡蛋的馅饼';

  89.     public function make()
  90.     {
  91.         return '面饼里面夹些韭菜鸡蛋';
  92.     }

  93.     public function box()
  94.     {
  95.         return '用纸袋子包装';
  96.     }
  97. }

  98. class XhlPizza extends Pizza
  99. {
  100.     public $name = '西葫芦的馅饼';

  101.     public function make()
  102.     {
  103.         return '面饼里面夹些西葫芦';
  104.     }

  105.     public function box()
  106.     {
  107.         return '用纸袋子包装';
  108.     }
  109. }

  110. // example
  111. // 购买一个芝士比萨
  112. $pizza = new USAPizza();
  113. $pizza->orderPizza('cheese');
  114. echo "\n-------------\n";
  115. // 购买中国传统馅饼
  116. $pizza2 = new CHINAPizza();
  117. $pizza2->orderPizza('egg');
阅读(3299) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~