抽象工厂取决于另一个抽象工厂

时间:2015-11-01 20:09:20

标签: inversion-of-control ioc-container abstract-factory

考虑以下域概念:

  • 输入处理程序(由具体类InputHandler表示;处理用户输入)
  • 攻击(取决于用户输入并在处理输入时使用; 有AN 攻击效果
  • 攻击效果(取决于运行时用户输入)

InputHandler(伪)中的一些可能的使用场景:

someAttackInstance.ApplyEffect(someInputDerivedData)

鉴于我不希望 Attacks 有不同的实现,是否建议:

  • InputHandler取决于抽象工厂 IAttackFactory ),用于实例化攻击
  • IAttackFactory取决于抽象工厂 IAttackEffectFactory )来实例化攻击效果
  • IAttackEffectFactory定义方法创建(SomeInputData)以创建效果

更新

以下是一些更多信息:

  • InputHandler:检测鼠标事件(左键单击,右键单击)和键盘事件(是否按下Ctrl)的类
  • 攻击:想想显示子弹的图像(左键单击=>红色子弹;右键单击=>蓝色子弹)
  • AttackEffect:如果按下Ctrl键,我们将子弹分配给子弹,否则为effect2。假设效果应用于其他对象。 (子弹如何影响墙壁?)

假设我想使用依赖注入,并在构造函数中传递依赖项。要实例化一个Attack实例,是否建议使用我的InputHandler类中的Abstract Factory IAttackFactory以及具有IAttackEffectFactory依赖关系来构建攻击效果的IAttackFactory?

假设InputHandler为root:

var bullet = attackFactory.CreateAttack(ctrlWasPressed);
bullet.Color = mouseButtonPressed == MouseButton.Right ? Color.blue : Color.Red;
在BulletAttackFactory中

ctor(IAttackEffectFactory fac){this.fac = fac;}

IAttack CreateAttack(bool ctrlPressed)
{
    IAttackEffect eff = this.fac.CreateEffect();
    IAttack att = new Attack(eff);
}
BulletEffectFactory中的

IAttackEffect CreateEffect(bool ctrlPressed)
{
    if(ctrlPressed)
        return new HighCaliberEffect();
    return LowCaliberEffect();
}

0 个答案:

没有答案