В информатике таблица диспетчеризации — это таблица указателей или адресов памяти для функций или методов . [1] Использование такой таблицы является распространенным приемом при реализации позднего связывания в объектно-ориентированном программировании .
Ниже показан один из способов реализации таблицы диспетчеризации в Perl с использованием хэша для хранения ссылок на код (также известных как указатели функций ).
# Определить таблицу, используя одну анонимную ссылку на код и одну именованную ссылку на код my %dispatch = ( "-h" => sub { return "hello\n" ; }, "-g" => \& say_goodbye ); sub say_goodbye { return "goodbye\n" ; } # Извлечь ссылку на код из таблицы и вызвать ее my $sub = $dispatch { $ARGV [ 0 ]}; print $sub ? $sub -> () : "unknown argument\n" ;
Запуск этой программы Perl как perl greet -h
вернет «hello», а запуск ее как perl greet -g
вернет «goodbye».
Ниже приведена демонстрация реализации таблицы диспетчеризации в JavaScript:
const thingsWeCanDo = { doThisThing () { /* поведение */ }, doThatThing () { /* поведение */ }, doThisOtherThing () { /* поведение */ }, default () { /* поведение */ } }; function doSomething ( doWhat ) { const thingToDo = Object . hasOwn ( thingsWeCanDo , doWhat ) ? doWhat : "default" ; return thingsWeCanDo [ thingToDo ](); }
В объектно-ориентированных языках программирования , поддерживающих виртуальные методы , компилятор автоматически создаст таблицу диспетчеризации для каждого объекта класса, содержащего виртуальные методы. Эта таблица называется таблицей виртуальных методов или vtable , и каждый вызов виртуального метода диспетчеризируется через vtable.