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

时间:2015-04-01 11:53:15

标签: java design-patterns

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

我考虑过:

  • A)

    • 接口被包装,仅显示下一个可能的方法。每次调用方法都会返回一个新的operation,可以在它之后调用,依此类推。
    • 因此ReserveTicketOperationpublic BuyTicketOperation execute();
    • 然后BuyTicketOperationpublic RenderTicketOperation execute();
  • B)

    • 使用某种context状态机,使用枚举记录执行位置,并有一个工厂用于获取下一个操作。

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

4 个答案:

答案 0 :(得分:3)

查看Fluent Builder模式。

这方面的一个例子是。

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

这个想法是你有一个允许方法的树'。树的每个级别都在一个界面中定义。所以你有一个'接口顺序'。每个接口中的所有方法都完成它们的工作(必须是无效的),然后返回另一个接口,对应于树的下一层。

答案 1 :(得分:2)

我的直接感受:这是根本不做模式。

如果您的方法的内在逻辑要求他们始终按特定顺序调用它们;然后,您将公开一个实现细节,使您可以非常轻松地使用您的界面做错事。

含义:而不是试图以某种方式强制您的客户代码"为了遵守某些特定的顺序,您应该以客户端代码不需要关心的方式设计您的接口" order"。

在您的特定示例中,问题似乎是票证对象可以被保留"或"买了#34 ;;当然,只有"买了#34;门票可以退回,退款,......

在这种情况下,"解决方案"可能实际上有不同的类用于"保留"门票和"买了"门票。那么你不必担心有人会试图退还一张只有"保留"。

的票。

答案 2 :(得分:2)

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

整个想法是,你正在准确地描述你正在谈论的一系列操作,但你允许每个单独的操作,以迈耶的术语“开放延伸。”

如果您不确定这些操作在运行时之前是什么,那么TM将无法工作。

答案 3 :(得分:2)

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

或许Command Pattern,其中

  

一个对象用于表示和封装所有信息   需要稍后调用方法。这些信息包括   方法名称,拥有方法的对象和方法的值   参数。