A Manager Class or an Interface

I am working on a system that changes the color of individual objects in the game. I have space ships that are going to change color…item pickups, asteroids, etc. My question is should I create an interface to allow this functionality as some objects will have different techniques to the actual color change. Or should I use one Color Manager class and have that instanced on each object that needs to have this feature. If you can also state why I should choose one method over the other I would GREATLY appreciate it. Thanks!

I would prefer to use the manager, store everything into a list or array and then just manage it from one source. I don’t personally like not knowing when unity is going to use it’s garbage clean up so having everything in one spot will be better.

public static Color ReturnRandomColor(GameObject gameObject = null)
    {
        Color randomColor = new Color();

        if (gameObject != null)
        {
            Color gameObjectColor = gameObject.GetComponent<Renderer>().material.color;

            randomColor.r = Mathf.Clamp(gameObjectColor.r + ReturnRandomNumber(0, 1), 0, 1);
            randomColor.g = Mathf.Clamp(gameObjectColor.g + ReturnRandomNumber(0, 1), 0, 1);
            randomColor.b = Mathf.Clamp(gameObjectColor.b + ReturnRandomNumber(0, 1), 0, 1);
        }
        else
        {
            randomColor.r = ReturnRandomNumber(0, 1);
            randomColor.g = ReturnRandomNumber(0, 1);
            randomColor.b = ReturnRandomNumber(0, 1);
        }
      
        return randomColor;
    }

I think factories like this is both better at organizing and maintaining future use and helps others understand. Plus look at how robust it is, I can attach it to a game object directly or return if I need to. Yeah it may be a little heavy on a stack but look at how pretty it is!