对不同的类实例使用相同的函数

时间:2010-10-04 14:41:15

标签: oop actionscript

我有一段代码,根据它的类型移动数组。如果数组是TypeA对象,它将更改TypeA。如果是TypeB,它将改变TypeB。当前代码的问题是重复块。

    private function scrollRight():void
    {   
        if (SELECTED == CONSTANT)
        {

            if (_avatarDataInstance.isFirstPage())
            {
                _buttons.enableLeftScroll();
            }
            setCurrentItems(_avatarDataInstance.getNextPage());
            if (_avatarDataInstance.isLastPage())
            {               
                _buttons.disableRightScroll();
            }
        }
        if (SELECTED == DECOR)
        {

            if (_decorDataInstance.isFirstPage()) {             
                _buttons.enableLeftScroll();
            }
            setCurrentItems(_decorDataInstance.getNextPage());
            if (_decorDataInstance.isLastPage()) {
                _buttons.disableRightScroll();
            }
        }

    }   

这将是我的想法代码,其中_selectedInstance是TypeA或TypeB的实例,无论选择哪一个(TypeA和TypeB是类)。

 private function scrollRight():void
 {  

if (_selectedInstance.isFirstPage())
{
       _buttons.enableLeftScroll();
}
setCurrentItems(_selectedInstance.getNextPage());   
if (_selectedInstance.isLastPage())
{               
    _buttons.disableRightScroll();
    }

无论如何,我可以在动作中实现这一点吗?我试过这个:

      _selectedInstance:Class;
if(somethingA)
   selectedInstance(somethingA);
else
   selectedInstance(somethingB);

每当我需要访问任何属性(用户)时,它停止工作selectedInstance.testSomething();

1 个答案:

答案 0 :(得分:1)

你可以创建一个接口或一个抽象类,例如TypeAbstract,TypeA和TypeB将扩展(或实现,取决于你的选择)。

private function scrollRight():void
{   
   var instance:TypeAbstract;

   switch( SELECTED )
   {
      case CONSTANT:
        instance = _avatarDataInstance as TypeA;
        break;

      case DECOR:
        instance = _decorDataInstance as TypeB;
        break;
    }

   if(instance.isFirstPage() )
      _buttons.enableLeftScroll();

   setCurrentItems(instance.getNextPage());

   if(instance.isLastPage() )
      _buttons.disableRightScroll();

}  

一般的想法是实现TypeA& amp;的常用方法。 TypeAbstract类中的TypeB。然后你可以在TypeA&中覆盖这些方法。 TypeB使方法适应子类的细节。 有关更多详细信息,请查看George Profenza提供的链接。