Есть класс, реализующий некоторую функциональность. У него должно быть два публичных интерфейса — один для "чужих" и другой для "своих". Причем, нужно чтобы чужие не имели доступа к интерфейсу для своих. И желательно вообще, чтобы они не знали о существовании этого интерфейса. Однако нужно, чтобы чужие могли создавать экземпляры этого класса.
Чтобы стало понятней, поясню на примере:
class Window
{
public: //Интерфейс для чужих
Window(); //Чужие могут создавать экземпляры этого класса
void SetSize(int x, int y); //Чужие могут выполнять какие-то действия с этим классом
public: //Интерфейс для своих, должен быть недоступен для чужих
HWND GetHwnd(); //Чужим не обязательно знать, что используется именно такой способ реализации этого объекта.
};
Как это можно сделать проще всего и как можно более естественно?
Допустимо создавать вспомогательные классы и использовать наследование.
Дружбу использовать не желательно(по крайней мере дружбу со всеми своими), так как список своих заранее не известен, и к тому же не всем своим следует иметь доступ к внутренним деталям реализации этого класса. Дружба со вспомогательным классами допустима.
Может быть есть какая-нибудь готовая идиома или паттерн проектирования реализующие такую схему?