ホームページ  >  記事  >  php教程  >  PHP デザイン パターン - 抽象的なファクトリ パターン

PHP デザイン パターン - 抽象的なファクトリ パターン

WBOY
WBOYオリジナル
2016-06-21 08:47:37950ブラウズ

抽象ファクトリ パターンを使用する必要がある場合:

1. システムは、製品クラスのインスタンスがどのように作成、結合、表現されるかという詳細に依存すべきではありません。これは、あらゆる形式のファクトリー パターンにとって重要です。

2. このシステムの製品には複数の製品ファミリーがあり、システムはそのうちの 1 つのファミリーの製品のみを消費します。

3. 同じ製品ファミリーに属する製品は併用されるため、この制約をシステム設計に反映する必要があります。

4. システムは製品クラス ライブラリを提供し、すべての製品は同じインターフェイスで表示されるため、クライアントは実装に依存しません。

ケース 1:

農場を例に考えてみましょう。

私たちの農場は複数の製品ラインに分かれており、そのうちの 1 つは北方産の野菜と果物の販売を専門としています。そのうちの 1 つは、南部の野菜や果物を専門に販売しています。ここでは例を示しませんが、UML クラス図を描いてみることもできます。

ケース 2:

コンピュータを例に挙げてみましょう

コンピュータは、PC コンピュータと Mac コンピュータに分けられます。 PC コンピューターには、組み立てに必要な CPU、マザーボード、およびキーボードが備わっています。Mac コンピューターにもこれらのコンポーネントが必要ですが、モデルは異なります。この例の UML クラス図は次のとおりです。

コード例:

この例は、ヌワによる人間の創造に基づいています。

コードをコピー

1

2

3 //この例は、ヌワによる人間の創造に基づいています

4

5 //最初にグローバル ファクトリ インターフェイスを定義します

6 //陰ロープと陽ロープを継承し、ロープを持ち上げる方法を実装する必要があります

7 インターフェース nvwaRope{

8 パブリック関数liftPeopleRope($name);

9 パブリック関数liftAnimalRope($name);

10 }

11

12 //nvwaRope を継承する ying Rope を定義します

13 クラス yinRope は nvwaRope を実装します{

14 パブリック関数liftPeopleRope($name){

15 新しい女の子($name) を返します;

16 }

17

18 パブリック関数liftAnimalRope($name){

19 return new muAnimal($name);

20 }

21 }

22

23 //ヤンロープの定義

24 クラス yangRope は nvwaRope を実装します{

25 パブリック関数liftPeopleRope($name){

26 return newboy($name);

27 }

28

29 パブリック関数liftAnimalRope($name){

30 return new gongAnimal($name);

31 }

32}

33

34

35 //人の抽象インターフェイスを定義します

インターフェース担当者 36 名{

37 パブリック関数 Eat();

38 パブリック関数 getName();

39 }

40

41

42 抽象クラス abstractPeople は people を実装します{

43 プライベート $name;

44

45 パブリック関数 __construct($name){

46 $this->name = $name;

47 }

48

49 パブリック関数 Eat(){

50 echo $this->name . " Eat";

51 }

52

53 パブリック関数 getName(){

54 echo $this->name;

55 return $this->name;

56 }

57

58 //胸があるかどうかを確認します

59 パブリック関数 checkChest(){

60 return $this->haveChest;

61 }

62 }

63

64 クラスの男子生徒が abstractPeople を拡張{

65 public $haveChest = false //少年には胸がありません

66 }

67

68 クラスの女の子が abstractPeople を拡張します{

69 public $haveChest = true //女の子には胸があります

70 }

71

72

73 //動物用の抽象インターフェースを定義

74 インターフェース動物{

75 パブリック関数 Eat();

76 パブリック関数 sleep();

77 }

78

79 抽象クラス abstractAnimal は動物を実装します{

80 プライベート $name;

81

82 パブリック関数 __construct($name){

83 $this->name = $name;

84 }

85

86 パブリック関数 Eat(){

87 echo $this->name . " 食べる";

88 }

89

90 パブリック関数 sleep(){

91 echo $this->name .

92 }

93

94 パブリック関数 getName(){

95 echo $this->name;

96 return $this->name;

97 }

98 }

99

100 //親動物クラスを定義します

101 クラス muAnimal は abstractAnimal を拡張します{

102 public $xingbie = "mu";

103}

104

105

106 //雄の動物クラスを定義します

107 クラス gongAnimal extends abstractAnimal{

108 public $xingbie = "gong";

109}

110

111

112

113 //使い方

114

115 //最初にファクトリーのインスタンス、つまり陰のロープまたは陽のロープのインスタンスを取得します

116 $yinRope = 新しい yinRope();

117

118 $people = $yinRope->liftPeopleRope("zhangsan");

119 echo $people->eat();

120 echo $people->getName();

121 var_dump($people->checkChest());

122

123 $animel = $yinRope->liftAnimalRope("horse");

124 echo $animel->eat();



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