确定方法调用顺序的接口设计模式

Design pattern for interface that determines order of method invocation

我想用一些方法创建一个 Java 接口。但我希望接口的用户只能按照我定义的顺序或顺序调用方法。例如 buyTicket() 不应在 reserveTicket() 之前调用。 问:是否有设计模式或任何提示可以解决这个问题?

我考虑过:

非常感谢任何想法或建议。谢谢

我的直觉:这就是根本不做的模式。

如果您的方法的内部逻辑要求它们始终按特定顺序调用它们;那么您将公开一个实现细节,这将使使用您的界面做错事变得非常容易。

含义:与其试图以某种方式强制您的 "client code" 遵守某些特定的顺序,您应该以客户端代码不需要关心的方式设计您的界面 "order"。

在您的特定示例中,问题似乎是票证对象可以是 "reserved" 或 "bought";当然,只有 "bought" 票可以退票、退款……

在这种情况下,对于 "reserved" 票和 "bought" 票,"solution" 实际上可能有 不同的 类 .那么您就不必担心有人试图退还一张只有 "reserved".

的机票

呃,这个问题的答案很简单,四人帮23人中已经有一个模式了:Template Method.

整个想法是,您正在准确地编纂您所谈论的一系列操作,但您允许每个单独的操作,用迈耶的术语 'open to extension.'

如果您直到运行时才确定这些操作是什么,那么 TM 将无法工作。

看看 Fluent Builder 模式。

这里有一个例子。

http://blog.crisp.se/2013/10/09/perlundholm/another-builder-pattern-for-java

这个想法是你有一个 'tree of allowable methods'。树的每一层都在一个接口中定义。所以你有一个 'order of interfaces'。每个接口中的所有方法都完成它们的工作(必须为空),然后 returns 另一个接口,对应于树的下一层。

也许 Template Method Pattern,其中您的 public 接口在 public 方法中定义算法的程序框架,称为模板方法,它将一些步骤推迟到私有方法。

或者 Command Pattern,其中

an object is used to represent and encapsulate all the information needed to call a method at a later time. This information includes the method name, the object that owns the method and values for the method parameters.