免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1148 | 回复: 0
打印 上一主题 下一主题

PHP设计模式之工厂模式,代码练习 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:48 |只看该作者 |倒序浏览
  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');
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP