3. 星际争霸之php设计模式--简单工厂模式

题记
==============================================================================
本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦!
==============================================================================


上次用星际争霸讨论了面向对象的基础知识,似乎面向对象能解决很多问题。
但是还会有很多问题,简单的靠类和对象解决不得太好。
比如如何根据玩家输入的内容(尽管可以转化为其他字符串),来确定要制造的兵种,玩家不会输入代码: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(),无需考虑具体的生产细节。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。