首頁 > php教程 > PHP开发 > 星际争霸之php简单工厂模式

星际争霸之php简单工厂模式

WBOY
發布: 2016-06-07 17:23:08
原創
1613 人瀏覽過

上次用星际争霸讨论了面向对象的基础知识,似乎面向对象能解决很多问题。


但是还会有很多问题,简单的靠类和对象解决不得太好。


比如如何根据玩家输入的内容(尽管可以转化为其他字符串),来确定要制造的兵种,玩家不会输入代码:new Marine()。


和星际一样,PHP也没有终极兵种,如果类和接口是兵种的话,那么设计模式就是你的战术和控制,它可以让你靠各种兵种的搭配获胜。


待解决的问题:在人族的兵营,我们靠相应玩家的输入来动态确定要造的兵种,假设是机枪兵和火焰兵。


思路:动态的根据传递的数据,新建相应的类的对象。



简单工厂模式示例:


我们把机枪兵类的代码放入一个文件,Marine.php,它的代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?php

 

class Marine {

 

    //机枪兵攻击的方法

 

  public function attack()

 

  {

 

    echo &#39;Marine attack&#39;;

 

  }

 

}

 

?>

登入後複製

我们把火焰兵类的代码放入一个文件,Firebat.php,它的代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?php

 

class Firebat {

 

    //火焰兵攻击的方法

 

  public function attack()

 

  {

 

    echo &#39;Firebat attack&#39;;

 

  }

 

}

 

?>

登入後複製

主文件中的内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<?php

 

//兵种制造器的类

 

class BarracksCreator {

 

    //制造兵种的方法

 

  public create($createWhat)

 

  {

 

   //根据输入的参数,动态的把需要的类的定义文件载入

 

    require_once($createWhat.&#39;.php&#39;);

 

   //根据输入的参数,动态的返回需要的类的对象

 

    return new $createWhat;

 

  }

 

}

 

//新建一个兵种制造器对象

 

$creator = new BarracksCreator();

 

//靠接收参数制造一个火焰兵对象

 

$troop1 = $creator->create(&#39;Marine&#39;);

 

$troop1->attack();

 

//靠接收参数制造一个机枪兵对象

 

$troop2 = $creator->create(&#39;Firebat&#39;);

 

$troop2->attack();

 

?>

登入後複製

用途总结:简单工厂模式可以将新建对象的任务进行封装,一旦需要增加新的返回类,只要修改负责新建对象的那部分代码。


实现总结:需要一个自动根据参数返回新建对象的工厂,比如上面兵种制造器BarracksCreator,使用的时候只需要将参数传递给他的生产方法create(),无需考虑具体的生产细节。


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板