首頁  >  文章  >  後端開發  >  php簡單工廠模式範例 php設計模式入門教程

php簡單工廠模式範例 php設計模式入門教程

WBOY
WBOY原創
2016-07-25 08:52:501175瀏覽
  1. /**

  2. * 一个事例
  3. *
  4. * 一个农场,要向市场销售水果
  5. * 农场里有三种水果 苹果、葡萄
  6. * 我们设想:1、水果有多种属性,每个属性都有不同,但是,他们有共同的地方 | 生长、种植、收货、吃
  7. * 2、将来有可能会增加新的水果、我们需要定义一个接口来规范他们必须实现的方法
  8. * 3、我们需要获取某个水果的类,要从农场主那里去获取某个水果的实例,来知道如何生长、种植、收货、吃
  9. */

  10. /**

  11. * 虚拟产品接口类
  12. * 定义好需要实现的方法
  13. */

  14. interface fruit{

  15. /**

  16. * 生长
  17. */
  18. public function grow();

  19. /**

  20. * 种植
  21. */
  22. public function plant();

  23. /**

  24. * 收获
  25. */
  26. public function harvest();

  27. /**

  28. * 吃
  29. */
  30. public function eat();
  31. }

  32. /**

  33. * 定义具体产品类 苹果
  34. * 首先,我们要实现所继承的接口所定义的方法
  35. * 然后定义苹果所特有的属性,以及方法
  36. */
  37. class apple implements fruit{

  38. //苹果树有年龄

  39. private $treeAge;

  40. //苹果有颜色

  41. private $color;

  42. public function grow(){

  43. echo "grape grow";
  44. }

  45. public function plant(){

  46. echo "grape plant";
  47. }

  48. public function harvest(){

  49. echo "grape harvest";
  50. }

  51. public function eat(){

  52. echo "grape eat";
  53. }

  54. //取苹果树的年龄

  55. public function getTreeAge(){
  56. return $this->treeAge;
  57. }

  58. //设置苹果树的年龄

  59. public function setTreeAge($age){
  60. $this->treeAge = $age;
  61. return trie;
  62. }

  63. }

  64. /**

  65. * 定义具体产品类 葡萄
  66. * 首先,我们要实现所继承的接口所定义的方法
  67. * 然后定义葡萄所特有的属性,以及方法
  68. */
  69. class grape implements fruit{

  70. //葡萄是否有籽

  71. private $seedLess;

  72. public function grow(){

  73. echo "apple grow";
  74. }

  75. public function plant(){

  76. echo "apple plant";
  77. }

  78. public function harvest(){

  79. echo "apple harvest";
  80. }

  81. public function eat(){

  82. echo "apple eat";
  83. }

  84. //有无籽取值

  85. public function getSeedLess(){
  86. return $this->seedLess;
  87. }

  88. //设置有籽无籽

  89. public function setSeedLess($seed){
  90. $this->seedLess = $seed;
  91. return true;
  92. }
  93. }

  94. /**

  95. *农场主类 用来获取实例化的水果
  96. *
  97. */
  98. class farmer{

  99. //定义个静态工厂方法

  100. public static function factory($fruitName){
  101. switch ($fruitName) {
  102. case 'apple':
  103. return new apple();
  104. break;
  105. case 'grape':
  106. return new grape();
  107. break;
  108. default:
  109. throw new badFruitException("Error no the fruit", 1);
  110. break;
  111. }
  112. }
  113. }

  114. class badFruitException extends Exception{

  115. public $msg;
  116. public $errType;
  117. public function __construct($msg = '' , $errType = 1){
  118. $this->msg = $msg;
  119. $this->errType = $errType;
  120. }
  121. }

  122. /**

  123. * 获取水果实例化的方法
  124. */
  125. try{
  126. $appleInstance = farmer::factory('apple');
  127. var_dump($appleInstance);
  128. }catch(badFruitException $err){
  129. echo $err->msg . "_______" . $err->errType;
  130. }
复制代码


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn