For me this is the best way to design something like that:
I always have a controller / handler script, which is located on an empty gameobject in the scene. Then i have x of my event gameobjects such as buttons or for example checkboxes, with a event script on it. The controller / handler class has all the methods and saves all the needed references to gameobjects, prefabs and so on. From the event scripts i just call methods located at the handler gameobject.
Simple example
There are some buttons which should play a music track on click. I dont want that more sounds are played at once, so my setup would look something like that:
Just one MusicBoxHandler:
- MusicBoxHandler script, with a Play(Audioclip clip) method
- AudioSource
One or more MusicBoxEvents;
- Script which has a reference to the MusicBoxHandler and JUST calls methods from the handler.
Hope i could help you

Regards