java - Java中通过类和接口(interface)实现不同的用户类型

标签 java design-patterns user-roles

问题
我对设计模式相当陌生,并且一直在研究《Head First Design Patterns》这本书。我需要实现一个具有 3 种用户的系统:成员(member)、版主、管理员。版主可以执行成员(member)可以执行的所有操作以及添加的内容,管理员可以执行版主可以执行的所有操作以及添加的内容。我已经绘制了如何使用接口(interface)和类来实现这一点的基本草图;由于缺乏经验,我需要 SO 社区关于此设计的建议 - 是否过于臃肿或愚蠢,或者是否需要更正。所以请耐心等待。

可能的解决方案
以下是接口(interface):

public interface AdminBehavior
{
    public addUser();
    public deleteUser();
}

public interface ModeratorBehavior
{
    public blockUser();
    public deletePost();
}

行为类别:

public class AdminBehaviors implements AdminBehavior
{
    public addUser()        {
        ...
    }
    public deleteUser()     {
        ...
    }
}

public class NoAdminBehaviors implements AdminBehavior
{
    public addUser()        {
        ...//cannot do
    }
    public deleteUser()     {
        ...//cannot do
    }
}

+ Same as above done for Moderators...classes ModeratorBehaviors and NoModeratorBehaviors

实际的用户类:

public class Member
{
    protected ModeratorBehavior moderatorBehavior;
    protected AdminBehavior adminBehavior;

    public Member()     {
        moderatorBehavior = new NoModeratorBehavior();
        adminBehavior = new NoAdminBehavior();
    }

    public login()      {
        ...
    }
    public logout()     {
        ...
    }
    public post()       {
        ...
    }
    public comment()        {
        ...
    }

    //Moderator priv'ed actions
    public blockUser()      {
        moderatorBehavior.blockUser();
    }
    public deletePost()     {
        moderatorBehavior.deletePost();
    }

    //Admin priv'ed actions
    public addUser()        {
        adminBehavior.addUser();
    }
    public deleteUser()     {
        adminBehavior.deleteUser();
    }
}

public class Moderator extends Member
{
    public Moderator()  {
        moderatorBehavior = new ModeratorBehavior();
        adminBehavior = new NoAdminBehavior();
    }
}

public class Admin extends Moderator ((or Member?))
{
    public Admin()  {
        moderatorBehavior = new ModeratorBehavior();
        adminBehavior = new AdminBehavior();
    }
}

就我个人而言,我觉得这似乎有点过度或令人困惑......更好的方法来做到这一点?

最佳答案

我很喜欢它......不过看起来有点臃肿。

我可能只会使用继承。 Admin 扩展了 Moderator 扩展了 Member 实现了 UserType。

  • UserType接口(interface)可以定义你所有的方法
  • 成员可以实现所有方法,但具有非行为
  • 主持人可以继承自成员并重写其需要行为的方法
  • Admin 可以继承 Moderator 并重写其需要行为的其他方法

    我认为这会更简单,但不太聪明

  • 关于java - Java中通过类和接口(interface)实现不同的用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734229/

    相关文章:

    java - 如何访问抽象类的 protected 方法?

    java - 关于 EBO 如何工作的一些说明(元素数组缓冲区)

    java - 删除字符串中的前括号和尾括号

    c# - 设计模式中枚举的替代方案

    c++ - 迈耶斯单例范围

    java - 按下按钮时不会重置时间

    Java文档状态模式?

    php - 如何不在 php 中进行数据库调用来检查用户角色?

    elasticsearch - 最好的 Kibana Multi-Tenancy 免费开源项目是什么?

    sql-server - 如何仅授予对 Sql Server 数据库中单个表的读访问权限