以下是我班级的结构
public abstract class BaseUser
{
protected List<Perm> permissions;
public abstract void AddPerm(Perm perm);
}
public class NormalUser : BaseUser
{
public override void AddPerm(Perm perm)
{
throw new InvalidOperationException("A normal user cant add permissions");
}
}
public class SpecialUser : BaseUser
{
public override void AddPerm(Perm perm)
{
if(permissions==null) permissions=new List<Perm>();
this.permissions.Add(perm);
}
}
class Container
{
List<BaseUser> users;
}
需要什么:
不允许普通用户添加权限 - 完成
我选择了战略模式来实现上述目标
我无法实现的是
两种类型的用户都将从数据库中保存(用户将使用默认权限列表进行初始化)
在这种情况下我选择这种模式是对的吗?如果是,那么我该如何解决要求4?
非常感谢, asolvent
答案 0 :(得分:1)
您提供的示例实际上不是strategy pattern的实例,它只是一种方法覆盖。策略模式涉及上下文对象和策略对象。无论如何,我会尽量避免在所有可能的地方应用OOP的诱惑。而不是继承考虑使用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
}
}
}
这种类型的问题是在企业数据驱动的应用程序中使用OOP的一个反复出现的主题,我通常会尽量保持简单。您真的需要派生基本用户类型来提供所需的功能吗?它会有其他行为和属性吗?