You don't necessarily need a Singleton for this. You can do it as a BasePage as you mentioned, or as a completely separate PageObject. Either way, there isn't a real need to do a singleton unlike something like a Configuration manager or a WebDriver Factory. In fact, if you take the BasePage approach, you won't be able to do singletons.
Besides doing a BasePage, another approach is just use a separate PageObject to represent a page fragment. I like this approach better in that you can support different abstract pattern that subclassing will not. For example, say you have 3 variations on your navigation bar, Pre-Login, Post-Login basic user, and Post-Login Admin User. Instead of doing a bunch of if/else logic to support all 3, it's much easier to to create 3 different classes and subclass each other to reuse the shared functionality, then use an Abstract PageFactory pattern to instantiate it so your tests are completely agnostic of your user level when it's not needed.