gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:02:52 24 4
gpt4 key购买 nike

问题
我对设计模式相当陌生,并且一直在学习《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)可以定义你所有的方法
  • 成员可以实现所有方法,但非行为
  • 版主可以从成员继承并覆盖它需要行为的方法
  • 管理员可以从 Moderator 继承并覆盖它需要行为的其他方法

    我认为这会更简单,但不那么聪明
  • 关于java - 通过Java中的类和接口(interface)实现不同的用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734229/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com