繁体   English   中英

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

[英]Design pattern for interface that determines order of method invocation

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

我考虑过:

  • 一种)

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

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

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

看看Fluent Builder模式。

这方面的一个例子就在这里。

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

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

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

如果你的方法的内在逻辑要求他们总是以某种顺序调用它们; 然后,您将公开一个实现细节,这将使您的界面使用起来非常容易。

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

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

在这种情况下,“解决方案”可能实际上是“保留”票和“买”票的不同类。 然后你不必担心有人试图退还只是“保留”的票。

呃,这个问题的答案很简单:在“四人帮: 模板方法”的23个中已经存在一种模式。

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

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

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

或者也许命令模式 ,在哪里

对象用于表示和封装稍后调用方法所需的所有信息。 此信息包括方法名称,拥有该方法的对象以及方法参数的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM