简单工厂模式在软件开发中的应用-新闻详情

简单工厂模式在软件开发中的应用


发布时间:2016-10-30责任编辑:朱明 浏览:1137


简单工厂模式,是我们在软件开发过程中经常会使用的一种设计模式。所谓简单工厂,是说使用一个单独的类,即“简单工厂类”,来负责创造一系列对象实例的过程,行使“工厂”的职责。

以跑酷项目为例,在玩家与Boss交战的过程中,Boss每次出招攻击,都需要玩家做出相应的操作,来进行破招,从而躲避Boss的攻击或是进行反击。Boss的每个攻击招式,都对应了不同的破解方式,这就形成了一系列Boss攻击——玩家破招的攻防策略。例如,

(1)   当Boss攻击下方时,需要玩家上滑跳起躲避;

(2)   当Boss攻击上方时,需要玩家下滑俯身躲避;

(3)   当Boss攻击中间时,需要玩家左滑或右滑向两侧躲避;

根据以上情况,Boss每次发动攻击,我们都需要判定玩家做出的操作是否能够化解这次攻击,这部分逻辑判定工作就交给策略类对象去处理。每个不同的策略子类对应处理不同的判定逻辑,有多少种攻击——破招策略,就有多少个不同的策略子类。而我们的简单工厂类,就负责根据Boss每次攻击传入的参数,来创建对应的策略类对象,调用其中的逻辑判定函数,返回执行的结果。根据这个结果,我们便能够得知玩家是否成功应对了Boss的攻击。它的结构图如下所示:

 

简单工厂1.png

 

其中,策略基类作为这一系列对象的基类,代码如下所示:

 

public class Strategy

{

 

 

Public virtual bool GetResult()

{

  bool result = false;

  return result;

}

}

 

然后,在具体的策略子类中,分别重写获取判定结果的方法:

 

public class StrategyA:Strategy

{

public override bool GetResult()

{

           bool result = false;

           if (如果玩家跳起)

{

                result = true;

}else

{

   result = false;

}

return result;

}

}

 

public class StrategyB:Strategy

{

     public override bool GetResult()

{

     bool result = false;

           if (如果玩家下滑)

{

                result = true;

}else

{

   result = false;

}

return result;

}

}

 

public class StrategyC:Strategy

{

     public override float GetResult()

{

           bool result = false;

           if (如果玩家左移或右移)

{

                result = true;

}else

{

   result = false;

}

return result;

}

}

 

简单策略工厂类:

 

public class StrategyFactory

{

public static Strategy CreateStrategy(strategy)

{

           Strategy stra = null;

switch(strategy)

{

  case StrategyA:

       stra = new StrategyA();

break;

  case StrategyB:

       stra = new StrategyB();

break;

  case StrategyC:

       stra = new StrategyC();

break;

}

return stra;

}

}

 

使用简单工厂模式,使得客户端类不需要关心具体的对象实例化过程,只要根据自己的需要,将参数传递给简单工厂类负责创建实例的方法,通过方法内的判断分支,返回对应的对象实例。之后根据多态的方式,执行对象实例的处理方法。这大大降低了客户端类对具体类的依赖。并且,当我们需要修改时,只需要改变传递给工厂方法的参数即可。

面对扩展,我们需要做的是编写更多的子类,以及在工厂方法中添加更多的条件判断分支,就可以了。但是,在工厂方法中添加条件判断分支的做法,违反了开放-封闭原则(对扩展开发,对修改封闭),这使得原有的其它判断分支也受到了影响,这也正是简单工厂模式的缺点所在。

       针对简单工厂模式的缺点,还有工厂方法模式、抽象工厂模式等不同的设计模式来进行改进与完善。这些模式在我们的跑酷项目中也有着不同的应用,让我们后面再继续深入探讨吧。

 

战国工作室  供稿