首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >战略模式实施

战略模式实施
EN

Stack Overflow用户
提问于 2011-12-29 08:45:34
回答 1查看 645关注 0票数 1

以下是我们班的结构

代码语言:javascript
复制
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;
}

所需:

  1. 容器将保留两种类型的用户。
  2. SpecialUser将具有添加权限完成的功能。
  3. 一般用户将不被允许添加权限。 我选择了战略模式来实现上述目标。 我做不到的是
  4. 这两种类型的用户都将从数据库中得到补充(用户将使用默认权限列表进行初始化)

在这种情况下选择这种模式对吗?如果是,那我该如何处理要求4?

非常感谢,阿索文特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-29 23:22:18

您提供的示例实际上不是战略模式的实例,它只是一个方法覆盖。策略模式包括上下文对象和策略对象。无论如何,我会尽量避免在所有可能的地方应用OOP的诱惑。考虑使用UserType枚举和一个简单的if语句来支持所需的行为,而不是继承。这使得映射到数据库变得更容易,并使代码保持简单:

代码语言:javascript
复制
enum UserType {
 Normal,
 Special
}

class User {

public UserType Type { get; set; }  

public override void AddPerm(Perm perm){
  switch (this.Type) {
 // logic goes here
  } 
 }
} 

在企业数据驱动应用程序中使用OOP时,这种类型的问题是反复出现的主题,我通常尽量保持简单。您真的需要派生一个基本用户类型来提供所需的功能吗?它会有更多的行为和属性吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8665635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档