以下是我们班的结构
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?
非常感谢,阿索文特
发布于 2011-12-29 23:22:18
您提供的示例实际上不是战略模式的实例,它只是一个方法覆盖。策略模式包括上下文对象和策略对象。无论如何,我会尽量避免在所有可能的地方应用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时,这种类型的问题是反复出现的主题,我通常尽量保持简单。您真的需要派生一个基本用户类型来提供所需的功能吗?它会有更多的行为和属性吗?
https://stackoverflow.com/questions/8665635
复制相似问题