在编程领域中工厂模式是一种非常有用的设计模式。特别是在游戏开发中,工厂可能会被用于生成敌人的对象,子弹物体,粒子特效,信息对象,等等。事实上,AndEngine甚至使用工厂模式为我们创建声音,音乐,纹理和字体等。在本节中,我们会发现,我们可以创建一个对象工厂,并讨论我们如何用它来创建对象。
1. 在我们创建对象工厂之前,我们应该创建我们的基础类以及至少一对子类继承基础类。
在第二个步骤中,我们看看ObjectFactory的代码。这个类应该包含工厂参与处理的一切和与特定对象类型有关的对象创建的所有变化。在这种情况下,两个不同的对象,只是需要mX和mY的变量来定义。在真实的情况下,我们可能会创建一个SpriteFactory类。这个类可能包含几个不同的方法来创建普通的精灵,按键精灵,或瓦状精灵等,通过SpriteFactory.createSprite(),SpriteFactory.createButtonSprite(),和SpriteFactory.createTiledSprite()方法。最重要的是,需要提供参数给这些方法,参数可能是位置,规模,纹理区域,颜色等。这个类的方法将返回一个新的对象的子类,这正是工厂类的目的。
1. 准备工作
请参阅名为ObjectFactory的代码包中的类。2. 怎么做
在本节中,我们使用的是ObjectFactory类的一种方式,我们很容易地创建并返回的BaseObject类的子类。然而在真实的项目中,工厂类通常不会包含内部类。1. 在我们创建对象工厂之前,我们应该创建我们的基础类以及至少一对子类继承基础类。
public static class BaseObject {
private int mX;
private int mY;
// BaseObject构造函数,所有子类在创建的时候应该定义mX和mY的值
BaseObject(final int pX, final int pY){
this.mX = pX;
this.mY = pY;
}
}
2. 一旦我们有了一个基础类的任意数量的子类,我们现在可以开始考虑实施的工厂设计模式。ObjectFactory类包含的方法将负责创建和返回LargeObject和SmallObject对象的类型。
public class ObjectFactory {
// Return a new LargeObject with the defined 'x' and 'y' member variables.
public static LargeObject createLargeObject(final int pX, final int pY){
return new LargeObject(pX, pY);
}
// Return a new SmallObject with the defined 'x' and 'y' member variables.
public static SmallObject createSmallObject(final int pX, final int pY){
return new SmallObject(pX, pY);
}
}
3. 它如何工作
第一步,我们创建一个基础类BaseObject。这个类包含两个成员变量称为mX和mY,如果我们用AndEngine实体处理,我们可以在显示屏上想像定义的位置。一旦我们得到了我们的基础类,我们就可以开始创建基础类的子类。在这个方法中BaseObject类有两个内部类,一个叫LargeObject,另外一个是SmallObject。在此实例中,对象工厂的工作是确定我们需要创建基础类的哪个子类,以及定义对象的属性,或mX和mY成员变量。在第二个步骤中,我们看看ObjectFactory的代码。这个类应该包含工厂参与处理的一切和与特定对象类型有关的对象创建的所有变化。在这种情况下,两个不同的对象,只是需要mX和mY的变量来定义。在真实的情况下,我们可能会创建一个SpriteFactory类。这个类可能包含几个不同的方法来创建普通的精灵,按键精灵,或瓦状精灵等,通过SpriteFactory.createSprite(),SpriteFactory.createButtonSprite(),和SpriteFactory.createTiledSprite()方法。最重要的是,需要提供参数给这些方法,参数可能是位置,规模,纹理区域,颜色等。这个类的方法将返回一个新的对象的子类,这正是工厂类的目的。