Как назвать этот ориентированный на ключ шаблон защиты доступа?
По-видимому, это ориентированный на ключ шаблон защиты доступа:
class SomeKey {
friend class Foo;
SomeKey() {}
// possibly non-copyable too
};
class Bar {
public:
void protectedMethod(SomeKey); // only friends of SomeKey have access
};
... пока не имеет известного имени, поэтому я хотел бы найти для него подходящее имя, чтобы мы могли ссылаться на него, не ломая язык. Предложения?
Так должно быть:
- краткий
- передать цель защиты доступа
- в идеале подразумевать, что проксирование не требуется (?)
4 ответа
Мне нравится, в порядке убывания предпочтений:
- идиома друга под ключ
- идиома друга под ключ
- идиома друга-пародера
- идиома друга под ключ
- частичная дружба идиома
- идиома ограниченного друга
Я перешел от схемы именования ключ-замок / ключ-замочная скважина к схеме именования пропусков, которая выросла на мне.
Я предлагаю назвать эту Идиому Знака, обозначающую жетон, представленный по запросу, подтверждающий обладание властью. Я считаю, что это лучшая метафора, чем те, которые вращаются вокруг термина " Ключ" во многих других ответах здесь.
"Ключ" уже достаточно перегружен в терминологии программирования, объединяя, по крайней мере, понятия поиска и ограниченного доступа. Кроме того, реальные ключи обычно работают с отдельными блокировками, а не с набором всех блокировок от производителя, и принимающий класс в этом шаблоне представляет собой набор не блокировок, а самозащитных объектов, которых просят выполнить действия.
"Знак" передает принцип, согласно которому токен предоставляет полномочия всему классу других объектов, а не только одному объекту. Термин может быть слишком зависим от (ориентированных на США?) Изображений полиции или безопасности, и я рассматривал такие термины, как " Повестка дня" или " Ордер", но они, казалось, были слишком сосредоточены на предоставлении доступа третьим лицам. В любом случае, люди с данным типом значка могут вынести кодифицированное поведение из классов людей, уважающих эти значки. Я вижу общее взаимодействие следующим образом:
- A: Эта вечеринка слишком громкая. Отключи стерео. (Дарит значок)
- Б: О, хорошо, офицер. (стон)
SomeKey выглядит как проход Backstage для входа в Bar::protectedMethod. Так что в этой области все должно быть хорошо: идиома паспорта, идиома лозунга, идиома паспорта, идиома VIP... классный доступ?
Есть другие способы сделать это, в более общем смысле, используя наследование. Здесь классный торт функционирует как замочная скважина и ключ. Здесь любой класс, который наследует (также может быть статическое наследование) от cake, может получить доступ к подмножеству SomeClass, определенному как доступный в cake, и, конечно, у вас может быть несколько разных подмножеств в нескольких разных классах.
class cake;
class SomeClass {
friend class cake;
void foo();
};
class cake {
void DoFoo(SomeClass& class) { class.foo(); }
};
class lols : cake {
// Now we can DoFoo().
};
Я бы назвал это замком и ключом.