Использование одной и той же функции для разных экземпляров классов - PullRequest
0 голосов
/ 04 октября 2010

У меня есть кусок кода, который перемещает массив в зависимости от его типа. Если массив состоит из объектов 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();
    }

В любом случае, я могу добиться этого в ActionScript? Я пробовал это:

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

Что перестает работать всякий раз, когда мне нужно получить доступ к любому свойству (пользователю) selectedInstance.testSomething ();

1 Ответ

1 голос
/ 05 октября 2010

Вы можете создать интерфейс или абстрактный класс, скажем, например, 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 и TypeB в классе TypeAbstract. Затем вы можете переопределить эти методы в TypeA и TypeB, чтобы адаптировать методы к специфике подкласса. Для получения более подробной информации, проверьте ссылки, предоставленные Джорджем Profenza.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...