По-видимому, этот ориентированный на ключ шаблон защиты доступа:
class SomeKey {
friend class Foo;
SomeKey() {}
// possibly non-copyable too
};
class Bar {
public:
void protectedMethod(SomeKey); // only friends of SomeKey have access
};
... еще не имеет известного имени, таким образом я хотел бы найти хороший для него так, мы можем обратиться к нему, не повреждая наши языки. Предложения?
Это должно быть:
Мне нравятся, по убыванию предпочтений:
Я перешел от схемы именования "ключ-замок/ключ-ключ" к схеме именования "пасс", которая мне понравилась.
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().
};
Я бы назвал это замком и ключом.
Я предлагаю назвать это Badge Idiom, обозначающей жетон, вручаемый по требованию и доказывающий обладание властью. Я считаю, что это лучшая метафора, чем те, что вращаются вокруг термина Ключ во многих других ответах здесь.
"Ключ" уже довольно перегружен в терминологии программирования, смешивая, по крайней мере, понятия поиска и ограниченного доступа. Кроме того, реальные ключи обычно управляют отдельными замками, а не набором всех замков одного производителя, и принимающий класс в этом шаблоне - это набор не замков, а самозащищающихся сущностей, которых просят выполнить действия.
"Значок" передает принцип, что токен дает полномочия целому классу других сущностей, а не только одному объекту. Этот термин может слишком полагаться на (ориентированные на США?) образы полиции или службы безопасности, и я рассматривал такие термины, как Subpoena или Warrant, но они показались мне слишком ориентированными на предоставление доступа третьей стороне. В любом случае, люди с определенным типом значка могут принуждать к кодифицированному поведению классы людей, уважающих эти значки. Я вижу общее взаимодействие примерно так: