欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php简单工厂模式示例 php设计模式入门教程

程序员文章站 2022-04-12 11:16:47
...
  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. }
复制代码