用 visitor pattern 儲存 component