Premature optimization is the root of all evil (ok, waste of programing time). Why would you care how many times a function is called? it is not like the memory or CPU is getting “weaker” by overusing it.
It is more important that the code you produce will be self documenting as much as possible than doing micro optimizations, and if it means 3 calls instead of one, then so be it.
If you have an actual performance issue because the function does some heavy/slow computation, the answer is to “internally” cache the heavy/slow parts.
Side note 1. Use WordPress APIs, do not reinvent wheels unless you have researched and found no other way as wordpress will do a lot of caching for you and your 3 DB access will in reality be only one in any case.
Side note 2. Singletons are rarely OOP and you will get a much easier to read and manipulate code, especially in the context of wordpress, if you just avoid classes and use namespaces in the first place.