选择设计模式

时间:2009-03-19 05:58:38

标签: java design-patterns

我需要设计一个类似于内部邮件系统的应用程序。但是,这只是一个课程项目。无需网络连接。教授只是让我们把讨论过的数据结构付诸实践。但是,我一直无法决定如何设计应用程序。让我简要解释一下我必须做什么,然后我会分享我的想法。

如果您知道这是一个基于命令行的应用程序,我认为这是一个好主意。没有涉及GUI。

内部邮件系统包含5种不同的可能状态。常规,管理员,用户,主持人和撰写。有可能一次只能处于一种状态。应用程序启动时,默认情况下进入常规状态。此状态下唯一可能的命令是登录其他帐户(User,Admin,Mod。)用户有基本命令,如阅读他的消息,向其他用户发送(撰写)新消息,删除消息,注销,还有几个。用户可以更改为以下两种状态之一:撰写或常规。要进入Compose状态,用户必须使用命令compose。在此状态下,您将向其他用户撰写消息。完成撰写邮件后,您将返回“用户”状态。用户返回General的唯一方法是退出。

Admin(继承User的行为)和Mod几乎相同。他们也可以改变状态。

以下是如何更改状态

的摘要
General |----->Admin
        |   |---->User(limited)  
        |   |---->Compose
        |
        |----->Moderator  
        |  
        |----->User  
        |   |---->Compose 

我是设计模式的新手。我最近一直在读他们很多。但是,这将是我第一次实施它们。如果我的一个建议看起来很奇怪,请告诉我。

状态模式似乎是一个好主意。我让我动态更改对象状态。但是,并非所有州都采用相同的方法。管理员拥有的方法多于用户。主持人没有管理员或用户的任何方法。您只能使用常规登录。我认为这将限制使用状态模式的能力。你对其他模式有什么建议吗?

我的另一个想法是以下内容。由于我可以上升和下降状态,我可以被视为一个堆栈。例如:处于撰写模式的用户。

\         /  
| Compose | <---- top (current state)  
|  User   |  
| General |  
-----------

您对我如何实现这一点有什么想法吗?它甚至可能吗?虽然我对Java最熟悉,但C ++或伪代码都很好。

2 个答案:

答案 0 :(得分:1)

这个漂亮的设计模式是"Role object model"。它可以应用于以下环境:

  
      
  • 您希望在不同的上下文中处理关键抽象,并且您不希望将生成的特定于上下文的接口放入同一个类接口中。
  •   
  • 您希望动态处理可用角色,以便可以按需添加和删除它们   在运行时,而不是在编译时静态修复它们。
  •   
  • 您希望透明地处理扩展,并且需要保留结果的逻辑对象标识   对象集团。
  •   
  • 您希望保持角色/客户端对彼此独立,以便对角色的更改不会影响客户端   那个角色不感兴趣。
  •   

该模式使用了三个元素:组件(此处为:您的用户),其中包含组件核心,它基本上管理角色和组件角色提供角色特定能力。 管理员用户主持人等是您上下文中的角色。

答案 1 :(得分:1)

我认为你必须要区分两个方面......

用户管理员主持人角色,而常规,< em> LogedIn 和 Compose 状态。因此,我认为您应该同时将角色两种设计模式进行比较。