除非注明转载,否则本博客文章皆为原创。 MSN: wfnlxp@hotmail.com QQ: 176564452

用星际学习PHP设计模式1-简单工厂模式

上一篇 / 下一篇  2007-03-17 21:06:38 / 个人分类:面向对象

不熟悉面向对象的朋友,建议先看看用星际快速入门PHP面向对象编程

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

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

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

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

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

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

简单工厂模式示例:

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

<?php

class Marine {

    //机枪兵攻击的方法

  public function attack()

  {

    echo 'Marine attack';

  }

}

?>

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

<?php

class Firebat {

    //火焰兵攻击的方法

  public function attack()

  {

    echo 'Firebat attack';

  }

}

?>

主文件中的内容如下:

<?php

//兵种制造器的类

class BarracksCreator {

    //制造兵种的方法

  public create($createWhat)

  {

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

    require_once($createWhat.'.php');

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

    return new $createWhat;

  }

}

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

$creator = new BarracksCreator();

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

$troop1 = $creator->create('Marine');

$troop1->attack();

 

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

$troop2 = $creator->create('Firebat');

$troop2->attack();

?>

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

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

 


TAG: PHP 设计模式 面向对象 简单工厂 工厂模式

引用 删除 jackywdx   /   2007-12-11 00:39:25
很好的学习资料,帮你转载了。
引用 删除 0766   /   2007-08-24 21:41:40
高手啊高手!
hoday的个人空间 引用 删除 hoday   /   2007-08-01 16:59:24
5
受教了~~~~谢谢!
Simon.K's home 引用 删除 kxp911   /   2007-04-27 13:52:20
太有才了···
引用 删除 166730   /   2007-04-17 15:36:02
5
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar