Как назвать этот ориентированный на ключ шаблон защиты доступа?

По-видимому, это ориентированный на ключ шаблон защиты доступа:

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().
};

Я бы назвал это замком и ключом.

Другие вопросы по тегам