Пример, который вы предоставили, на самом деле не является примером стратегии , это просто переопределение метода. Шаблон стратегии включает в себя объект контекста и объект стратегии. Несмотря на это, я бы постарался избежать соблазна применить ООП во всех возможных местах. Вместо наследования рассмотрите использование перечисления UserType и простого оператора if для поддержки требуемого поведения. Это облегчает сопоставление с базой данных, а также делает код простым:
enum UserType {
Normal,
Special
}
class User {
public UserType Type { get; set; }
public override void AddPerm(Perm perm){
switch (this.Type) {
// logic goes here
}
}
}
Проблема такого типа является повторяющейся темой при использовании ООП в корпоративных приложениях, управляемых данными, и я обычно стараюсь сделать все как можно более простым. Вам действительно нужно получить базовый тип пользователя для обеспечения требуемой функциональности? Будет ли у него дополнительное поведение и свойства?