ホームページ >バックエンド開発 >PHPチュートリアル >PHPのシンプルなファクトリパターン例 PHPデザインパターン入門チュートリアル

PHPのシンプルなファクトリパターン例 PHPデザインパターン入門チュートリアル

WBOY
WBOYオリジナル
2016-07-25 08:52:501214ブラウズ
  1. /**

  2. * 例
  3. *
  4. * ある農場が市場に果物を売りたいと考えています
  5. * 農場にはリンゴとブドウの 3 種類の果物があります
  6. * 私たちは次のように想像しています: 1. 果物には多くの属性があり、それぞれの属性は異なります。しかし、それらには共通の場所があります | 育てる、植える、受け取る、食べる
  7. * 2. 新しい果物が将来追加される可能性があります。それらが実装する必要があるメソッドを標準化するためのインターフェイスを定義する必要があります
  8. * 3. のクラスを取得する必要があります。特定の果物、栽培、植え方、収穫、食べ方を知るには、農家から特定の果物の例を入手する必要があります
  9. */

  10. /**

  11. * 仮想製品インターフェイス クラス
  12. * 実装する必要があるメソッドを定義
  13. */

  14. /**

  15. *成長
  16. */
  17. パブリック関数 give();

  18. /**

  19. *植栽
  20. */
  21. パブリック関数 plant();

  22. /**

  23. * 収穫
  24. */
  25. パブリック関数 Harvest();

  26. /**

  27. *食べる
  28. */
  29. public function Eat();
  30. }

  31. /**

  32. * 特定の製品カテゴリ Apple を定義します
  33. * まず、継承されたインターフェイスによって定義されたメソッドを実装する必要があります
  34. * 次に、Apple 固有の属性とメソッドを定義します
  35. */
  36. class apple は Fruit を実装します{

  37. < p> //苹果树有年龄
  38. private $treeAge;

  39. //苹果有颜色

  40. private $color;

  41. パブリック関数grow(){

  42. echo "ブドウの成長";
  43. }

  44. public function plant(){

  45. echo "ブドウの植物";
  46. }

  47. public function Harvest(){

  48. echo "ブドウの収穫";
  49. }

  50. public function Eat(){

  51. echo "ブドウを食べる";
  52. }

  53. //取苹果树の年龄

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

  57. //設置結果树の年龄

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

  62. }

  63. /**

  64. * 特定の製品クラス Grape を定義します
  65. * まず、継承されたインターフェイスによって定義されたメソッドを実装する必要があります
  66. * 次に、Grape の固有の属性とメソッドを定義します
  67. */
  68. クラス ブドウ器具フルーツ{

  69. //葡萄があるかどうか

  70. private $seedLess;

  71. public function give(){

  72. echo "apple give";
  73. }

  74. public function plant(){

  75. echo "apple plant";
  76. }

  77. public function Harvest(){

  78. echo "リンゴの収穫";
  79. }

  80. public function Eat(){

  81. echo "apple Eat";
  82. }

  83. //有無籽取值

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

  87. //設置有籽無し

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

  93. /**

  94. *ファーマークラスはインスタンス化されたフルーツを取得するために使用されます
  95. *
  96. */
  97. 級農民{

  98. //定义个静态工厂メソッド

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

  113. class badFruitException extends Exception{

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

  121. /**

  122. * フルーツのインスタンス化を取得するメソッド
  123. */
  124. try{
  125. $appleInstance = farmer::factory('apple');
  126. var_dump($appleInstance);
  127. }catch(badFruitException $err ){
  128. echo $err->msg . 「_______」 。 $err->errType;
  129. }
复制代


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。