web-dev-qa-db-ja.com

この種のものの適切な用語は何ですか?

「決定を下すもの」のリストが大きくなりすぎてif/elseまたはswitchステートメントで実用的でない場合によく使用する構成は、値とコールバックを含むテーブルを作成することです。たとえば、次のようなものです(C):

struct keymap {
    int key;
    int (*callback)(struct data *data);

    int end;
};

...

struct keymap controls[] = {
    {'a', move_left},
    {'d', move_right},
    ...
    {.end = 1}
};

...

struct keymap *
keymap_find(int key)
{
    for(struct keymap *selmap = controls; !selmap->end; selmap++)
        if(selmap->key == key)
            return selmap;

    return NULL;
}

...

int
some_exec_function(struct data *data)
{
    struct keymap *selmap = keymap_find(get_key());

    if(selmap == NULL)
        return 0;

    return selmap->callback(data);
}

私は認めるよりも多くの「デザインパターン」を研究しましたが、このタイプのデザインを完全に捉えているものは何も見つかりませんでした。特にパラダイムはやや宣言型です。なぜなら、最終的にはコントロールがテーブルによって定義されるため、「どのように行うか」ではなく「何をするか」と言っているからです。新しいエントリの追加と意図の理解は非常に簡単で簡単です。

適切な用語が何であるかわかりません。長期的にアプローチを改善できるように、同様のデザインでそれを研究したいと思います。

2
Braden Best

呼び出すルーチンの値とアドレスのテーブルを作成しているようです。これは「 ディスパッチテーブル "」のようです。

5
BillThor