我有一个 Request 类,可以处于以下状态之一:
草案 提交后, 批准, 被拒绝, InMission, 完成
可以通过调用以下方法之一来更改 Request 对象的状态。每种方法都可能包含一些参数,以进一步将某些数据与特定状态相关联:
void Submit(string by) { }
void Approve(string by, string comment) { }
void Reject(string by, string comment) { }
void AddToMission(Mission mission) { }
void Complete() { }
我在考虑在这里实施州模式。我的每个州级课程都会保存与他们相关的额外信息。我在这里实现 State 模式的主要想法是不在 Request 类本身中添加所有这些未发布的属性,例如:
public string ApprovedBy;
public string ApprovedComment;
public string RejectedBy;
public string RejectedComment;
public Mission Mission;
您认为州模式是否适合在此实施?
此致
MOSH
答案 0 :(得分:0)
状态模式的优点是您无法在草稿上调用Complete()
,因为它根本没有该方法。但是,您似乎想要一个更复杂的类结构。
所以你会比实现某些Document接口的所有这些更像一棵深树。
如果你想要这个,那就好好想想,因为超过3个级别的嵌套类是一件很麻烦的事情。解决方案可以是仅生成两个或三个实数类型,并将一些状态存储在属性字段中。例如,草案将具有属性Rejected或Status。
另一种方法是使用Decorator模式。也就是说,如果文档被批准,则构造一个新的Approved并将Draft传递给构造函数。这样,您就无法获得深度继承,仍然可以从草稿中获取信息。
答案 1 :(得分:0)
据我所知,您的问题是在课程之间传递不同的信息?
您可以将所有这些信息组合在一个结构或类中,并将其作为抽象Request方法的agrument转移。 因此,每个派生类(草稿,已提交,已批准)可以从此结构中获取所需信息或进行设置。 移动你可以像这样统一这个信息:
struct Info{
public string Status; // may be aproved reqested or so.
public string Comment; // just a comment depending on state
//public string RejectedBy;
//public string RejectedComment; no need it
public Mission Mission; //extra info
}